2011-11-20 147 views
0

复杂的关系花了这么多时间试图得到这个工作后建议,我不得不承认,我靠近拉我的头发,并希望得到一些帮助,实际上发生之前!需要帮助,并在创造EF 4.1

这是很难解释的实际应用断章取义 - 这是我能想到的最好的例子。

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不为空,请获取所有内容,并且基本上继续对所有返回的类别执行此操作)

我已经非常接近这个了,但是,我只是不能解决所需的EF FluentAPI/Data Annotations,以便将多个链接从Category重新导入Category nav。

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

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

无论如何,所有/任何帮助将大大赞赏!很高兴回答任何问题。

+0

我希望这读起来很好,如果没有,我把它归咎于编码整天,几乎没有在哪里....请让我知道,我会在早上重新编辑/尝试整理。 – Wil

回答

1

如果我正确理解您的问题,您基本上需要您的TheObject类和Category类之间的多对多关系。如果您在SQL的角度来考虑这一点,你将有一个TheObject表,Category表,连接表,你有可能试图与你CategoryNav类实现。

查阅这些职位的帮助在第一次创建与EF代码许多一对多的关系:

至于类别树,你会想要一个一对多的关系,这样每个子类别只有一个父类别,否则你正在处理一个图表这将使遍历更加复杂。

最后,关于CategoryNav课程,我不确定您试图通过与TheObject关联的类别链接以外的方式实现。在TheObject课程中收集CategoryCategoryNav背后有其他含义吗?