模型没有变化,EF迁移是否应该创建空的空Up()Down()方法?还是根本没有迁移?

时间:2019-07-17 13:59:00

标签: .net-core entity-framework-core

我正在使用EntityFrameworkCore Code First创建我的SQL迁移脚本。

在模型中进行每次更改后,我运行Add-Migration changeInModel,并且正在“迁移”文件夹中生成相应的XXXXXXXX_changeInModel.cs文件。

如果我未对模型进行任何更改并且运行了Add-Migration noChangeInModel,则我假设(无处不在)没有生成XXXXXX_noChangeInModel.cs

但是,EF Core正在使用空的Up和Down方法创建一个XXXXXX_noChangeInModel.cs。

这应该是预期的行为吗?还是应该EF Core跳过生成一个空的.cs文件?我在文档中找不到对此的任何引用。

我已经完成了我的主项目,并将所有代码剥离到最低限度,以找出配置中的行为还是某种错误。

使用以下Nuget软件包,在最小内核之下可以重现生成空的Up / Down方法,而模型没有变化:

  • Microsoft.EntityFrameworkCore 2.2.6
  • Microsoft.EntityFrameworkCore.SqlServer 2.2.6
  • Microsoft.EntityFrameworkCore.Tools 2.2.6
  • Microsoft.NETCore.App 2.2.0
namespace TestingEFCore
{
    public class ApplicationDbContextFactory : IDesignTimeDbContextFactory<BloggingContext>
    {
        public BloggingContext CreateDbContext(string[] args)
        {
            var connectionString = "Server=localhost;Database=TEST2;Integrated Security=SSPI;";
            var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>();
            optionsBuilder.UseSqlServer(connectionString);
            return new BloggingContext(optionsBuilder.Options);
        }
    }

    public class BloggingContext : DbContext
    {
        public BloggingContext(DbContextOptions<BloggingContext> options)
            : base(options)
        { }

        public DbSet<Blog> Blogs { get; set; }
    }

    public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }
    }
}

我希望不会生成任何XXXXXX_noChangeInModel.cs,但是我会使用空的Up / Down方法进行迁移。我找不到描述此用例的文档。

1 个答案:

答案 0 :(得分:0)

我认为这是预期的行为。考虑以下情况:模型没有变化,但是需要像这样在数据库中添加一些数据

public partial class your_migration : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.Sql(@"your sql");            
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.Sql(@"sql to clean up data");
    }
}

如果不进行空迁移而不会产生模型更改,那么将不可能获得这种迁移。