Entity framework 如何使用实体框架数据库优先方法为数据播种?

Entity framework 如何使用实体框架数据库优先方法为数据播种?,entity-framework,entity-framework-5,Entity Framework,Entity Framework 5,我看到了许多先使用代码进行种子设定的示例,但我不确定自己是否理解在首先使用EF数据库时对数据库进行种子设定的惯用方式。最佳实践取决于具体情况。然后是开发环境与产品环境。 在开发过程中使用Drop和recreate on model change时进行自动种子设定,这样您就可以获得最有意义的测试数据。这是它使用最多的时候 当然,您可以有一个手动触发的测试方法。我个人认为自动触发种子方法的想法并不那么令人兴奋,而且在DB结构不稳定的情况下更适合开发人员原型设计。在使用迁移时,您往往会保留来之不易的测

我看到了许多先使用代码进行种子设定的示例,但我不确定自己是否理解在首先使用EF数据库时对数据库进行种子设定的惯用方式。

最佳实践取决于具体情况。然后是开发环境与产品环境。 在开发过程中使用Drop和recreate on model change时进行自动种子设定,这样您就可以获得最有意义的测试数据。这是它使用最多的时候

当然,您可以有一个手动触发的测试方法。我个人认为自动触发种子方法的想法并不那么令人兴奋,而且在DB结构不稳定的情况下更适合开发人员原型设计。在使用迁移时,您往往会保留来之不易的测试数据。一些在产品的初始安装期间使用播种。另一些将在安装/调试过程中触发特定的加载例程。我喜欢使用自定义加载例程

编辑:代码第一个示例。使用DB First,您只需正常写入DB。

// select the appropriate initializer for your situation eg
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, MyMigrationConfiguration>());
Context.Database.Initialize(true);  // yes now please
//...
 public class MyMigrationConfiguration<TContext> : DbMigrationsConfiguration<TContext> 
    where TContext  : DbContext{

    public  MyMigrationConfiguration() {
        AutomaticMigrationsEnabled = true;  //fyi  options
        AutomaticMigrationDataLossAllowed = true; //fyi options
   }
    public override void Seed(TContext context)
    {
        base.Seed(context);
// SEED AWAY..... you have the context
    }

}
//根据您的情况选择适当的初始值设定项,例如
SetInitializer(新的MigrateDatabaseToLatestVersion());
Context.Database.Initialize(true);//好的,现在请
//...
公共类MyMigrationConfiguration:DbMigrationsConfiguration
其中TContext:DbContext{
公共MyMigrationConfiguration(){
AutomaticMiggerationsEnabled=true;//供参考选项
AutomaticMigrationDataLossAllowed=true;//供参考选项
}
公共覆盖无效种子(TContext上下文)
{
种子(上下文);
//播种……你有背景
}
}

这看起来不像是数据库优先。DB First首先不支持迁移。不支持先迁移代码。很抱歉种子过程首先与代码一起进行。在DB-first中,建模过程有一行代码,以防止过程启动。我现在对DB first和seeding很好奇。显然是一个空数据库。因此,最初的评论仍然有效。仅此示例是不相关的,因为它的DB firstDatabase First是在您已经拥有数据库并且希望使用它来创建模型时使用的。在这种情况下,数据库中很可能有数据。您也不希望/无法删除数据库。我想知道如果您已经有了数据,您希望在什么情况下为数据库种子。总之,您可以使用sql脚本添加数据,也可以通过创建上下文、创建实体、将它们添加到上下文并保存更改来添加数据。由于不删除数据库,您可能只想删除一次。在db中,可以按照您喜欢的任何方式创建/设定数据库种子。英孚在那里完全是个局外人。