实体框架7-在迁移结束时运行种子



我有一个迁移类:

public partial class TestMigration : Migration
{
protected override void Up(MigrationBuilder db)
{

在Up方法的最后,我想添加一些数据(种子)。MigrationBuilder公开了一些方法,还有Sql(),但我希望使用EF。

我可以在这里注入DbContext并做一些事情吗?

我不建议您在向上或向下迁移中为数据库种子。这是一种不好的做法。

您可以在up/down方法中执行Sql语句,并按如下方式对表进行种子设置:

EF6:

public override void Up()
{
Sql("INSERT INTO Customers (CustomerName, ContactName) VALUES ('Cardinal','Tom B.')");
...
}

EF Core 1.0/7:

protected override void Up(MigrationBuilder db)
{
db.Sql("INSERT INTO Customers (CustomerName, ContactName) VALUES   ('Cardinal','Tom B.')");
}

其中Customer是DbSet<'的实体客户通过DbContext的客户

您可以在迁移期间通过提供连接字符串来创建DbContext,也可以从confugration加载它,但请注意此时数据库尚未完成,更新进度仍在使用中。这件事以后可能会给你带来很大的麻烦。

1) 使用普通的DBInitializer.Seed将数据种子设定到数据库中。

2) 使用"向上/向下迁移"中的Sql语句转换(更新/删除/插入)数据,并在迁移过程中使旧数据库架构和新数据库架构之间的数据兼容。

3) 不要尝试在迁移过程中创建DbContext。

在迁移过程中无法修改数据。当前用于种子数据库的解决方案是在应用程序启动时执行此操作,如Unicode存储示例所示,它确保所有种子数据都可用。

在第3042期中对此进行了讨论,目前的努力似乎是改变迁移故事,使在迁移期间播种数据成为可能。它目前计划后RTM,所以我现在不会打赌。

最新更新