需要在EF 4.1中创建复杂关系方面的帮助和建议

本文关键字:关系方 帮助 复杂 创建 EF | 更新日期: 2023-09-27 18:15:27

在花了这么多时间试图让这个工作之后,我不得不承认我快要把头发拔出来了,我想在真正发生之前得到一些帮助!

脱离上下文来解释实际应用是非常困难的——这是我能想到的最好的例子。

public class TheObject{
    public int ID {get;set;}
    public string name {get;set;}
    public int? CategoryNavID {get;set;}
    public virtual Category CategoryNav {get;set;}}
public class CategoryNav{
    public int id {get;set;}
    public virtual ICollection<Category> Category {get;set;}}
public class Category{
    public int ID {get;set;}
    public string name {get;set;}
    //The category this is currently in.
    public int CategoryNavID
    //To create sub categories.
    public int? CategoryID {get;set;}
    public virtual Category Category {get;set;}}

所以,基本上,有一堆对象,一个对象可以有许多附加的类别,进一步说,一个类别可以有多个附加的类别(无限级)。

再一次,这很难脱离上下文来解释——这不是实际的系统,但是,这是我试图实现的最终目标。

坦率地说,我今天一直在努力做到这一点,我不确定我是否最好使用CategoryNav类,或者是否有一个更好的,更直接的方法来做到这一点。

我只是想要一个解决方案,我可以很容易地得到一个对象,然后遍历所有类别,然后遍历所有子类别,直到无限级。(目前,我想得到的对象,然后,如果CategoryNavID不是null,得到所有的内容,基本上保持这样做的所有类别返回)

我已经非常非常接近这一点,但是,我只是不能找出所需的EF FluentAPI/数据注释,以便有多个链接从类别回到类别导航。

最后,如果可能的话,我还想要一种方法来获得CategoryNav/ID,并获得它所属的原始对象-即使它是最后一个子类别- 20个链。这根本不需要,因为我有适当的逻辑* -我只是确定我不是在做最有效的方式。-目前认为在类别中创建"TheObject"FK会更容易-我知道你不应该在不需要的地方重复数据,但是,我认为这将是迄今为止最简单的解决方案。

*目前,我走了很长的路-获得一个类别/导航的ID,检查它是否存在作为一个Object/CategoryNavID,如果它不存在,它回到类别,并搜索任何类别与它作为categoryID,然后得到的类别ID,基本上保持循环这个动作,直到它找到顶部对象。

无论如何,所有/任何帮助将非常感激!

需要在EF 4.1中创建复杂关系方面的帮助和建议

如果我正确理解你的问题,你本质上想要你的TheObject类和Category类之间的多对多关系。如果您从SQL的角度考虑这一点,您将有一个TheObject表,一个Category表和一个连接表,您可能已经尝试用CategoryNav类实现了。

请先查看这些文章,了解如何使用EF代码创建多对多关系:

  • 使用代码优先创建多对多映射
  • 代码优先关系流畅API
  • Code First EF 4.1:建立多对多关系

对于类别树,您需要一个一对多的关系,以便每个子类别只有一个父类别,否则您将处理一个将使遍历更加复杂的图。

最后,关于CategoryNav类,我不确定您想要实现什么,而不是作为链接到与TheObject相关的类别。在TheObject类中收集Category不是更容易吗?或者CategoryNav背后有其他含义吗?