簡體   English   中英

C#EntityFramework遞歸泛型模型引用

[英]C# EntityFramework recursive generic model referencing

作為介紹,我想給你以下例子

想象一下,你有不同的口味,例如StrawberryRaspberry ,......它們本身就是“純凈的”。

現在你想制作一種本身就是其他口味的復合物的味道,例如Fruity ,它由兩種口味的StrawberryRaspberry ,每種口味加重50%。

現在讓我們假設您希望通過在炎熱的夏天添加一些Mint來制作更新鮮的版本。 你創造了一種風味Fresh n' Fruity ,由FruityMint兩種口味組成,分別加權80%和20%。

這種遞歸引用的概念是我試圖通過EntityFramework 6.1.3上的CodeFirst方法實現的。


根據我的理解, 數據庫模式應該看起來像這樣: UML數據庫架構


試圖在代碼中表示這一點我提出了以下構造:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM