实体框架 – 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.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....