C#EntityFramework递归泛型模型引用
作为介绍,我想给大家举一个例子: 假设你有不同的口味,例如,C#EntityFramework递归泛型模型引用,c#,entity-framework,recursion,recursive-datastructures,C#,Entity Framework,Recursion,Recursive Datastructures,作为介绍,我想给大家举一个例子: 假设你有不同的口味,例如,草莓,覆盆子。。。它们本身就是“纯洁的” 现在,您想制作一种由其他口味混合而成的口味,例如,果味,它由两种口味组成草莓和覆盆子,每种口味重量为50% 现在让我们假设您想制作一个更新鲜的版本,在炎热的夏天添加一些Mint。你创造了一种口味新鲜水果味,它由两种口味水果味和薄荷味组成,分别加权80%和20% 递归引用的概念是我在EntityFramework 6.1.3上尝试使用CodeFirst方法实现的 在我的理解中,数据库模式应该是这
草莓
,覆盆子
。。。它们本身就是“纯洁的”
现在,您想制作一种由其他口味混合而成的口味,例如,果味
,它由两种口味组成草莓
和覆盆子
,每种口味重量为50%
现在让我们假设您想制作一个更新鲜的版本,在炎热的夏天添加一些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; }
}
派生part类的原因是实体框架无法处理泛型类,我有多个不同的类,它们具有这种part机制
我的问题是,这段代码没有以我希望的方式映射到数据库中。确切地说,没有生成交叉引用表
有什么建议吗?好吧,在经过更多的测试和新的想法后,我想到了以下几点: 模型
Flavor
现在定义了以下属性:
[InverseProperty("Component")]
public virtual ICollection<PartFlavor> Parts { get; set; }
[InverseProperty("PartOf")]
public virtual ICollection<PartFlavor> Variants { get; set; }
这将生成问题中所示的数据库
我希望这对某人有所帮助好吧,经过更多的测试和新的想法后,我想到了这个: 模型
Flavor
现在定义了以下属性:
[InverseProperty("Component")]
public virtual ICollection<PartFlavor> Parts { get; set; }
[InverseProperty("PartOf")]
public virtual ICollection<PartFlavor> Variants { get; set; }
这将生成问题中所示的数据库
我希望这有助于某人你需要PartFlavor香精做什么?@RomanoZumbé跟踪哪种PartFlavor是哪种香精的一部分。e、 g.我有味道
草莓
,我在PartFlavor中有一个条目,引用它,权重0.5
(50%)。。也许还有其他的口味可以参考这种特殊的口味。这就是交叉表的作用。我认为你设计的问题解决方案不是最好的。我建议只使用两张桌子,一张放纯口味的,另一张放混合口味的。第二张桌子上应该有一个flavor1Id和一个flavor2id以及它们各自的重量。@RomanoZumbé。。如果你想组合两种以上的口味,该怎么办?设计第二个表格时,你不仅可以参考基本口味,还可以参考口味组合(自我参考)。你需要PartFlavor flavor做什么?@RomanoZumbé跟踪哪种PartFlavor是哪种口味的一部分。e、 g.我有味道草莓
,我在PartFlavor中有一个条目,引用它,权重0.5
(50%)。。也许还有其他的口味可以参考这种特殊的口味。这就是交叉表的作用。我认为你设计的问题解决方案不是最好的。我建议只使用两张桌子,一张放纯口味的,另一张放混合口味的。第二张桌子上应该有一个flavor1Id和一个flavor2id以及它们各自的重量。@RomanoZumbé。。如果你想组合两种以上的口味,那该怎么办?第二个表格的设计方式不仅可以参考基本口味,还可以参考口味组合(自我参考)
[Required]
[InverseProperty("Parts")]
public virtual T Component { get; set; }
[InverseProperty("Variants")]
public virtual ICollection<T> PartOf { get; set; }