0

我使用的是 EF 5 Code First。我有以下 Fluent API 代码为“SaleZipCode”设置导航属性。

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

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

4

1 回答 1

0

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

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

然后将生成以下迁移

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

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

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

于 2013-07-07T14:21:28.467 回答