EF 6 Code First迁移警告或阻止破坏性更新

Joe*_*oel 5 entity-framework ef-migrations entity-framework-6 asp.net-mvc-5

问题:是否存在在运行迁移脚本时警告无意中丢失数据的设置.

自4.1以来我一直在使用代码优先迁移,但是在测试项目中进行实验时遇到了我没想到的行为.也许我没有跟上新功能.

说我有一个简单的模型:

    public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和背景:

    public class CustContext : DbContext
{
    public CustContext() : base("DefaultConnection") { }
    public DbSet<Customer> Customers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我已经启用了迁移,创建了初始迁移,按如下方式更新了数据库,然后用数据填充了表.

enable-migrations
add-migration initial
update-database
Run Code Online (Sandbox Code Playgroud)

然后我将Address的名称更改为HomeAddress.这是迁移脚本:

add-migration HomeAddress

    public partial class HomeAddress : DbMigration
{
    public override void Up()
    {
        AddColumn("dbo.Customers", "HomeAddress", c => c.String());
        DropColumn("dbo.Customers", "Address");
    }

    public override void Down()
    {
        AddColumn("dbo.Customers", "Address", c => c.String());
        DropColumn("dbo.Customers", "HomeAddress");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是配置脚本:

    internal sealed class Configuration : DbMigrationsConfiguration<CodeFirstMigrations.Model1.CustContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
        AutomaticMigrationDataLossAllowed = false;
    }

    protected override void Seed(CodeFirstMigrations.Model1.CustContext context)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行update-database命令时,我完全期望得到一个错误:"无法完成迁移,因为它会导致数据丢失......"我实际上在我自己的项目中看到了很多错误.

但相反,它愉快地删除了(填充的)Address列,并创建了一个新的HomeAddress列.

我认为必须有一个配置设置来控制该行为,但我能找到的只是AutomaticMigrationDataLossAllowed显然只适用于自动迁移.

我忽略了什么吗?

kjb*_*tel 4

这已经被作为一个问题提出,但被拒绝为“设计使然”。

决定这是设计使然 - 我们只警告自动迁移导致数据丢失。

请参阅此处的错误。

  • 这非常令人不满意,但我认为它必须算作正确答案。:) (2认同)