Entity framework 实体框架5和代码优先-我能让它进行重命名而不是拖放和创建吗?

Entity framework 实体框架5和代码优先-我能让它进行重命名而不是拖放和创建吗?,entity-framework,ef-code-first,Entity Framework,Ef Code First,我先用EF5代码。我有下面的Fluent API代码,它为“SaleZipCode”设置了一个导航属性 private void MyTable(DbModelBuilder modelBuilder) { modelBuilder.Entity<MyType>() .HasRequired(a => a.SaleZipCode) .WithMany() .Map(map => map.MapKey("SaleZip

我先用EF5代码。我有下面的Fluent API代码,它为“SaleZipCode”设置了一个导航属性

private void MyTable(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<MyType>()
        .HasRequired(a => a.SaleZipCode)
        .WithMany()
        .Map(map => map.MapKey("SaleZipCodeId"));
}
private void MyTable(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasRequired(a=>a.SaleZipCode)
.有很多
.Map(Map=>Map.MapKey(“SaleZipCodeId”);
}

我意识到我把“SaleZipCode”命名错了,应该是“ZipCode”。但是,当我执行此操作时,EF尝试在更新数据库时删除SaleZipCode列并添加ZipCode列,而不仅仅是重命名。这不起作用,因为表中已有数据。有没有办法让EF进行重命名而不是删除并重新创建?

重命名实体中的属性不应影响数据库,因为数据库中没有
SaleZipCode
列。外键映射到
SaleZipCodeId
列,只有更改此外键列映射才会影响数据库。例如,如果您将映射更改为

modelBuilder.Entity<MyType>()
    .HasRequired(a => a.Foo) // changing this will not affect database
    .WithMany()
    .Map(map => map.MapKey("ZipCodeId")); // column name changed

简单地重命名列,数据将被保留。

理论上这可能是EF应该做的。但事实上,EF试图做的是添加一个新列:altertable[MySchema].[MyTable]add[ZipCodeId][int]notnull默认值0@RandyMinder事实上是这样。代码在实际数据库上用数据进行了验证
public override void Up()
{
    RenameColumn(table: "dbo.MyTypes", 
                 name: "SaleZipCodeId", newName: "ZipCodeId");
}

public override void Down()
{
    RenameColumn(table: "dbo.MyTypes", 
                 name: "ZipCodeId", newName: "SaleZipCodeId");
}