微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

实体框架 – EF 6 Code First迁移警告或阻止破坏性更新

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

自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; }
}

和背景:

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

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

enable-migrations
add-migration initial
update-database

然后我将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","HomeAddress");
    }
}

这是配置脚本:

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

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

    }
}

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

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

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

我忽略了什么吗?

解决方法

这已被提出作为一个问题,但被拒绝为“按设计”.

Decided this is by design – we only warn for automatic migrations with data loss.

请参阅错误here.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐