需要在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,基本上保持循环这个动作,直到它找到顶部对象。
无论如何,所有/任何帮助将非常感激!
如果我正确理解你的问题,你本质上想要你的TheObject
类和Category
类之间的多对多关系。如果您从SQL的角度考虑这一点,您将有一个TheObject
表,一个Category
表和一个连接表,您可能已经尝试用CategoryNav
类实现了。
请先查看这些文章,了解如何使用EF代码创建多对多关系:
- 使用代码优先创建多对多映射
- 代码优先关系流畅API
- Code First EF 4.1:建立多对多关系
对于类别树,您需要一个一对多的关系,以便每个子类别只有一个父类别,否则您将处理一个将使遍历更加复杂的图。
最后,关于CategoryNav
类,我不确定您想要实现什么,而不是作为链接到与TheObject
相关的类别。在TheObject
类中收集Category
不是更容易吗?或者CategoryNav
背后有其他含义吗?