加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 07:01:32 所属栏目:asp.Net 来源:网络整理
导读:问题:是否存在在运行迁移脚本时警告无意中丢失数据的设置. 自4.1以来我一直在使用代码优先迁移,但是在测试项目中进行实验时遇到了我没想到的行为.也许我没有跟上新功能. 说我有一个简单的模型: public class Customer{ public int Id { get; set; } public
问题:是否存在在运行迁移脚本时警告无意中丢失数据的设置.

自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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读