作为介绍,我想给你以下示例:
想象一下,你有不同的口味,例如,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无法处理泛型类,并且我有多个具有这种部分机制的不同类。
我的问题是这个代码没有按照我希望的方式映射到数据库中。确切地说,没有生成交叉引用表。
有什么建议吗?
答案 0 :(得分:0)
好吧,在经过一些测试和新想法之后,我想出了这个:
模型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; }
这将生成如问题
中所示的数据库我希望这有助于某人