[英]C# EntityFramework recursive generic model referencing
作為介紹,我想給你以下例子 :
想象一下,你有不同的口味,例如Strawberry
, Raspberry
,......它們本身就是“純凈的”。
現在你想制作一種本身就是其他口味的復合物的味道,例如Fruity
,它由兩種口味的Strawberry
和Raspberry
,每種口味加重50%。
現在讓我們假設您希望通過在炎熱的夏天添加一些Mint
來制作更新鮮的版本。 你創造了一種風味Fresh n' Fruity
,由Fruity
和Mint
兩種口味組成,分別加權80%和20%。
這種遞歸引用的概念是我試圖通過EntityFramework 6.1.3上的CodeFirst方法實現的。
試圖在代碼中表示這一點我提出了以下構造:
public class Flavor
{
[Key]
public Int32 FlavorId { get; set; }
[Required]
[MinLength(3)]
[MaxLength(64)]
public String Name { get; set; }
public virtual ICollection<PartFlavor> Parts { get; set; }
}
它引用了一個PartFlavors
集合,它是一個名為Part
的泛型類的派生類。 它們看起來像這樣
public abstract class Part<T>
{
[Key]
public Int32 PartId { get; set; }
[Required]
public Double Weight { get; set; }
[Required]
public virtual T Component { get; set; }
}
public class PartFlavor : Part<Flavor> { }
派生part類的原因是因為Entity Framework無法處理泛型類,並且我有多個具有這種部分機制的不同類。
我的問題是這個代碼沒有按照我希望的方式映射到數據庫中。 確切地說,沒有生成交叉引用表。
有什么建議?
好吧,經過一些更多測試和新想法,我想到了這個:
Flavor
模型現在定義了以下屬性:
[InverseProperty("Component")]
public virtual ICollection<PartFlavor> Parts { get; set; }
[InverseProperty("PartOf")]
public virtual ICollection<PartFlavor> Variants { get; set; }
在Part
類中
[Required]
[InverseProperty("Parts")]
public virtual T Component { get; set; }
[InverseProperty("Variants")]
public virtual ICollection<T> PartOf { get; set; }
這會生成問題中顯示的數據庫
我希望這可以幫助別人
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.