Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#EntityFramework递归泛型模型引用_C#_Entity Framework_Recursion_Recursive Datastructures - Fatal编程技术网

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; }