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

Mad*_*per 3 c# entity-framework entity-framework-core

我有一个迁移课程:

public partial class TestMigration : Migration
{
    protected override void Up(MigrationBuilder db)
    {
Run Code Online (Sandbox Code Playgroud)

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

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

Bas*_*ili 5

我不建议您向上或向下迁移数据库。这是一个坏习惯。

您可以在up / down方法中执行Sql语句,并按以下方式播种表:

EF6:

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

EF Core 1.0 / 7:

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

其中Customer是您的DbContext的DbSet <'Customer'>客户的实体

您可以在迁移期间通过提供连接字符串或从配置中加载它来创建DbContext,但请考虑一下 该数据库在此时间点是否尚未完成并且更新进度仍在使用中。这件事可能会给您以后带来很大的麻烦。

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

2)在上/下迁移中使用Sql语句转换(更新/删除/插入)数据,并在迁移过程中使旧数据库模式与新数据库模式之间具有数据兼容性。

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

  • 为什么在迁移过程中修改数据是不好的做法?实际上,我看不出任何原因。 (5认同)