EF Code First。未加载TPT继承和子相关实体

时间:2012-06-18 11:35:12

标签: entity-framework-4

我已经使用了一段时间,但还没有找到解决方案。我在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>

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

如果您认为需要有关我的问题的更多信息,请提出任何问题。非常感谢提前。

0 个答案:

没有答案