10

初めて Entity Framework の Code First スタイルを使用しています。デフォルトデータを設定したい。私が遭遇した最初のアプローチは、カスタムの初期化子を作成することでした。私はこのルートに向かっていましたが、移行をセットアップした後、カスタム初期化子のようにシード メソッドを既にオーバーライドしている Configuration.cs が付属していることに気付きました。

internal sealed class Configuration : DbMigrationsConfiguration<Toolkit.Model.ToolkitContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
    }

    protected override void Seed(Toolkit.Model.ToolkitContext context)
    {
        //  This method will be called after migrating to the latest version.

        //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
        //  to avoid creating duplicate seed data. E.g.
        //
        //    context.People.AddOrUpdate(
        //      p => p.FullName,
        //      new Person { FullName = "Andrew Peters" },
        //      new Person { FullName = "Brice Lambson" },
        //      new Person { FullName = "Rowan Miller" }
        //    );
        //
    }
}

したがって、このタスクを達成するには2つの方法があるようです。誰かがこれを行うための推奨される方法に光を当てることができますか? または、それはまったく問題であり、コインを投げるだけですか?

4

1 に答える 1

13

Configuration.cs Seed メソッドは、モデルが変更されるたびに実行され、特定のデータが DB に残るようにするか、場合によってはそのデータを指定された既定の設定にリセットします。

一方、カスタム初期化子のシード メソッドは、現在 MVC ページの Global.asax ファイルにある次のコードのように、アプリケーションが読み込まれるたびに実行するように設定できます。

Database.SetInitializer(new MyCustomInitializer<MyDbContext, Configuration>());
var db = new MyDbContext();
db.Database.Initialize(true);

実際の違いは、アプリケーションをデプロイした後で明らかになります。カスタム初期化子は、プログラムで絶対に必要な一部のデータをユーザーが破棄できないようにします。

于 2012-12-20T22:00:42.470 に答える