0

私はEF 5 Code Firstを使用しています。「SaleZipCode」のナビゲーション プロパティを設定する次の Fluent API コードがあります。

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

「SaleZipCode」という名前を間違えたことに気付きました。「ZipCode」のはずです。ただし、これを行うと、EF は、単に名前を変更するのではなく、Update-Database を実行するときに、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 に答える