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显然只适用于自动迁移.
我忽略了什么吗?
| 归档时间: |
|
| 查看次数: |
663 次 |
| 最近记录: |