私はMVC4アプリケーションで、エンティティフレームワーク(v 5)コードの最初の移行を行っています。データベースレベルで一意の制約を追加したいと思います。
テーブルを作成するときにこれを実行できることは知っていますが、すでにテーブルがあります。 http://msdn.microsoft.com/en-US/data/jj591621
回答回答としてマークされた次のことを試しました:EFCodeFirstとSqlCe4による一意の制約
私のデータベースコンテキストは少し異なります。接続名は次のとおりです。
public AppDatabaseContext() : base("MyConnectionDBContext")
パッケージ管理コンソールを使用してデータベースを更新すると、オーバーライドされたシードメソッドが呼び出されません。
protected override void Seed(AppDatabaseContext context)
私も次のことを試しました:http://romiller.com/2010/07/31/ef-ctp4-tips-tricks-running-additional-ddl/
ネストされたクラスを使用しませんでした。これは、app.configを介して初期化子を登録する必要があるように見えたためです。コードで初期化しているときに動作させることができませんでした。InitializeDatabaseが呼び出されますが、次の条件が真になることはありません。
(!context.Database.Exists() || !context.Database.ModelMatchesDatabase())
これは、移行が実行された後に発生するためです...
また、これを1つの段階で試しました。エンティティフレームワークコードの一意の制約最初に、これは以前と同じ問題であり、この条件がtrueを返すことはありませんでした。
理想的には、移行ファイルにいくつかの標準SQLを含めたいと思います。それを行う方法はありますか?そうでない場合、コードファーストマイグレーションを使用してこれを達成する方法はどこで確認できますか?
ありがとう!
アップデート:
SQL関数が使えない理由はありますか?
public override void Up()
{
AddColumn("Posts", "Abstract", c => c.String());
Sql("UPDATE Posts SET Abstract = LEFT(Content, 100) WHERE Abstract IS NULL");
}
明らかに正しいSQLを使用しています...