我已经使用了一段时间,但还没有找到解决方案。我在SO中没有看到类似的东西。
首先,EF 4.3.1.0和MVC3
我有一个类Component,两个表继承自:Group和Item。组也可以包含组件列表(我们知道它们可以是组或项目)。
到目前为止一切都很好。现在问题。还有另一个类:布局。组(并且只有组,而不是项目或组件)具有布局。
问题在于,当我加载所有Components层次结构时,Group的Layout对象始终为null。
让我提一些代码:
public abstract class Component
{
public int Id { get; set; }
public string Name { get; set; }
public bool Active { get; set; }
public int OrderNum { get; set; }
public virtual Group ParentGroup { get; set; }
}
[Table("Group")]
public class Group : Component
{
public virtual IList<Component> Items { get; set; }
public virtual Layout Layout { get; set; }
public Group()
{
this.Items = new List<Component>();
Layout = new Layout();
}
}
public class Layout
{
public int Id { get; set; }
public string Data { get; set; }
}
我尝试过使用和不使用Lazyloading。
如果我在对上下文的调用中包含Layout表,只要我只检索组,它就可以工作。如果我还检索项目,它将抛出一个异常(显然它可以建立Item和Layout之间的关系)。
因此,如果我检索所有组件,那么如果组件是一个组,我必须再次调用上下文来检索该确切的Group对象,然后它将随布局一起提供。但我认为这种方式效率很低,除此之外,当我展示所有层次结构时,我也不会在视图中这样做。
据我所知,由于我正在检索实体为Component而Component没有Layout,因此即使某些组件确实是具有布局的组,也不会为组加载布局。 / p>
我的问题是如何检索所有层次结构,如组件层次结构,然后当我浏览它时,如果当前元素是一个组,以便在将组件转换为组件后能够访问布局分组,而不是从数据库中手动检索。
如果您认为需要有关我的问题的更多信息,请提出任何问题。非常感谢提前。