如何使用Entity Framework数据库优先方法种子数据?

7

我看到很多使用Code First的示例,但是当使用EF Database First时,我不确定种子数据的惯用方法。


数据库优先是指当你已经拥有数据库并希望使用它来创建模型时。在这种情况下,你很可能已经在数据库中有了数据。你也不想/不能删除数据库。我想知道如果你已经有数据,为什么还要填充数据库的场景是什么。无论如何 - 你可以使用SQL脚本添加数据,或者通过创建上下文、创建实体并将它们添加到上下文中并保存更改来添加数据。由于你不删除数据库,所以你可能只想执行这个操作一次。 - Pawel
在数据库优先模式下,数据库的创建和种子数据可以以任何你喜欢的方式进行。EF 完全是个外来者。 - Gert Arnold
1个回答

1
最佳实践非常依赖于具体情况。此外,开发环境与生产环境也有所不同。 在开发过程中,使用“删除并重新创建模型更改时自动种子”可以生成测试数据,这是最合理的。这是它被广泛应用的场景。 当然,您也可以手动触发测试方法。我个人认为自动触发种子方法并不那么令人兴奋,更适用于开发原型,当数据库结构不稳定时。使用迁移时,您倾向于保留您辛苦获得的测试数据。一些人在PROD的初始安装过程中使用种子。其他人将在安装/投入运行过程中触发特定的加载例程。我喜欢使用自定义加载例程。 编辑:CODE FIRST示例。对于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
    }

}

4
这似乎不是数据库优先。事实上,DB First 本身就不支持迁移。 - Pawel
种子过程需要使用Code First。在DB First中,建模过程会有一行代码作为停止点,以防止进程启动。现在我对DB First和种子过程很好奇。显然是一个空的数据库。因此,原始评论仍然有效。只是示例与DB First无关。 - phil soady

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接