4

何千ものレコードが含まれる既存のテーブルに新しいブール列を追加する非常に単純な 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つのオプションがありますが、どちらも好きではありません。

  1. 最初の移行が完了するまで列は存在しないため、2 つの個別の移行を作成します。これはずさんなようで、実際に更新を実行するために 2 回目の移行でデータベース コンテキストを取得する方法もわかりません。
  2. DbMigrationsConfiguration 実装でコードを実行します。ただし、このコードは毎回実行されるため、既に実行されており、レコードを更新すべきでないかどうかはわかりません。

別のより良いオプションはありますか?

4

1 に答える 1