我正在使用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方法,而模型没有变化:
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方法进行迁移。我找不到描述此用例的文档。
答案 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");
}
}
如果不进行空迁移而不会产生模型更改,那么将不可能获得这种迁移。