2017-05-29 41 views
0
使用相同的通用外鍵字段(KEYID)單個表

我有一個名爲地址具有以下屬性類:連同(類型)字段的EntityFramework

public int Id { get; set; } 
public string Name { get; set; } 
public string Address1 { get; set; } 
public string Address2 { get; set; } 
public string City { get; set; } 
public string State { get; set; } 
public string Country { get; set; } 
public string ZipCode { get; set; } 
public int KeyId { get; set; } 
public AddressType Type { get; set; } 

的計劃是地址類型,以成爲客戶,供應商或位置的枚舉,並將KeyId作爲來自客戶,供應商或位置的外鍵。

這是一些能夠正確實體框架來完成或者我應該做3個獨立的類CustomerAddress,VendorAddress,LocationAddress。

+0

AddressType代表一個或多個表?我的意思是在db中你只有一個名字爲AddressType的地址 –

+0

AddressType是一個枚舉,而不是數據庫中的一個表。抱歉應該指定。 –

回答

0

您需要從單個數據庫表中生成實體繼承結構。可以實現通過使用每個類型的方法

TBT Entity Framework

集團共同特性的表成「基地」實體,然後用鑑別(你的情況AddressType)爲專業的對象。

+0

我想我找到了一個使用Fluent API指定外鍵的解決方案。我爲每個實體添加了一個Addresses導航屬性。然後對於每個實體我做了以下指定外鍵:builder.Entity () .HasMany(c => c.Addresses) .WithOne(a => a.Customer) .HasForeignKey(a => a .KeyId); –

0

我看起來像你有三個表客戶,供應商或位置,你想爲每個保存地址。

然後,而不是在地址表添加地址類型,你應該包括AddressID每個表的外鍵,並且必須在每個表中的地址的導航性能。

+0

我相信你能夠刪除AddressType字段是正確的。但是,這些實體可以有很多地址。所以我會爲每個類添加一個List導航屬性。然後在Fluent API中,我相信我會這樣做,將KeyId指定爲外鍵:builder.Entity () .HasMany(c => c.Addresses) .WithOne(a => a.Customer) 。 HasForeignKey(a => a.KeyId); –