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

时间:2011-11-20 23:57:42

标签: c# entity-framework-4.1 ef-code-first

在花了这么多时间试图让它发挥作用之后,我不得不承认我已经接近拔掉头发并希望在实际发生之前得到一些帮助!

很难从上下文中解释实际应用 - 这是我能想到的最好的例子。

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课程,或者是否有更好,更直接的方法。< / p>

我只想要一个解决方案,我可以轻松获取一个对象,然后遍历所有类别,然后将所有子类别转换为无限级别。 (目前,我正在考虑获取对象,然后如果CategoryNavID不为null,则获取所有内容,并且基本上继续对返回的所有类别执行此操作)

我非常接近这一点,但是,我无法计算出所需的EF FluentAPI / Data Annotations,以便从Category返回到Category nav的多个链接。

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

*目前,我要走很长一段路 - 获取类别/导航的ID,检查它是否存在为Object/CategoryNavID,如果不存在,则会返回类别,并使用它作为categoryID搜索任何类别,然后获取该类别ID,并基本上保持循环此操作,直到找到顶级对象。

无论如何,所有/任何帮助将非常感谢!很高兴回答任何问题。

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您基本上希望TheObject班级和Category班级之间存在多对多关系。如果您从SQL的角度考虑这一点,您将拥有TheObject表,Category表和连接表,您可能已尝试使用CategoryNav类实现该表。

查看这些帖子,获取有关首先与EF代码创建多对多关系的帮助:

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

最后,关于CategoryNav课程,除了作为与TheObject相关联的类别的链接之外,我不确定您要尝试实现的目标。在Category课程中收集TheObjectCategoryNav背后是否​​还有其他含义会不会更容易?