時正確的方法來設置外鍵關聯有兩個表在我的數據庫:Masters
和Details
。
這些表都與一個一對多與外鍵約束,其中的Masters
是主鍵表,Details
是一個外鍵表。使用繼承
我想用繼承在我的模型都從Masters
表單位:
abstract class Master
{
public int Id { get; set; }
}
class Master_1 : Master
{
// other properties
}
class Master_2: Master
{
// other properties
}
,並從Details
表單位:
abstract class Detail
{
public int Id { get; set; }
}
class Detail_1 : Detail
{
// other properties
}
class Detail_2: Detail
{
// other properties
}
class Detail_3: Detail
{
// other properties
}
但對國外的關鍵是什麼?
從概念上講,Master_1
只應包含Detail_1
的詳細信息,而Master_2
應包含Detail_2
或Detail_3
的詳細信息。
如果我會從實體框架抽象的,我要補充的中間基類Detail_2
和Detail_3
:
abstract class Detail_2_Or_3 : Detail {}
class Detail_2 : Detail_2_Or_3 {}
class Detail_3 : Detail_2_Or_3 {}
,讓我Master
通用:
abstract class Master<TDetail>
where TDetail : Detail
{
public int Id { get; set; }
public Collection<TDetail> Details { get; private set; }
}
class Master_1 : Master<Detail_1> {}
class Master_2 : Master<Detail_2_Or_3> {}
但是如何可以做到這一點使用實體框架?我不喜歡這個解決方案,因爲Master
的集合是Details
,因爲這不能提供編譯時的保證。
我正在尋找沒有附加層的方式,而不是Master
和Detail
層次結構。 任何想法?
這是一個有趣的閱讀,並希望爲您提供回味無窮...... http://weblogs.asp.net/manavi/archive/2011/01/ 03/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-3-table-per-concrete-type-tpc-and-selecting-strategy-guidelines.aspx –
@PaulZahra: t認爲TPC繼承的描述可能有所幫助。可能是我錯過了什麼? – Dennis
你看過TPT和TPH嗎? –