问题:是否存在在运行迁移脚本时警告无意中丢失数据的设置.
自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,它显然只适用于自动迁移.
我忽略了什么吗?