0

我已经有一段时间了,还没有找到解决方案。我在这里没有看到任何类似的东西。

首先,EF 4.3.1.0 和 MVC3

我有一个 Component 类,两个表继承自:Group 和 Item。一个组也可以包含一个组件列表(我们知道它们可以是组或项)。

到那时一切都很好。现在的问题。还有另一个类:布局。一个组(并且只有一个组,而不是项目或组件)有一个布局。

问题是当我加载所有组件层次结构时,组的布局对象始终为空。

让我放一些代码:

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; }
}

我尝试过使用和不使用延迟加载。

如果我在对上下文的调用中包含布局表,只要我只检索组,它就可以工作。如果我还检索 Items,它将引发异常(显然它可以建立 Item 和 Layout 之间的关系)。

因此,如果我检索所有组件,那么如果该组件是一个组,我必须再次调用上下文以检索该确切的组对象,然后它将与布局一起提供。但是我认为这种方式效率很低,而且当我显示所有层次结构时,我也不打算在视图中这样做。

据我所知,由于我将实体作为组件检索并且组件没有布局,因此即使某些组件确实是具有布局的组,也不会为组加载布局。

我的问题是如何像组件层次结构一样检索所有层次结构,然后当我通过它时,如果当前元素是一个组,以便在将组件转换为组后能够访问布局,而不是手动检索从数据库。

如果您觉得需要有关我的问题的更多信息,请提出任何问题。提前谢谢了。

4

0 回答 0