何千ものレコードが含まれる既存のテーブルに新しいブール列を追加する非常に単純な Entity Framework 5 DbMigration があります。既存の各行のその列の初期値を、同じテーブル内の他の 2 つの列の値に基づいて設定したいと考えています。これは既存のレコードにのみ影響するため、移行の実行時にのみ実行し、二度と実行しないでください。
これは基本的に実行する必要があるロジックです。
var users = (from u in context.Users select u).ToList();
users.ForEach(u =>
{
u.MyNewBoolColumn = (u.Column1 != null && u.Column2 == "some-value");
context.Users.AddOrUpdate(u);
});
考えられる2つのオプションがありますが、どちらも好きではありません。
- 最初の移行が完了するまで列は存在しないため、2 つの個別の移行を作成します。これはずさんなようで、実際に更新を実行するために 2 回目の移行でデータベース コンテキストを取得する方法もわかりません。
- DbMigrationsConfiguration 実装でコードを実行します。ただし、このコードは毎回実行されるため、既に実行されており、レコードを更新すべきでないかどうかはわかりません。
別のより良いオプションはありますか?