.net 实体框架-继承

.net 实体框架-继承,.net,database,entity-framework,.net,Database,Entity Framework,我刚开始使用实体框架,有以下问题: 我有一个包含导航属性段落的站点实体 我有多个应该从段落继承的实体(即Image段落、LinkList段落) 我想查询站点对象并访问其段落,并根据其具体类型(即Image段落、LinkList段落)使用它们 它将使用逐层次表的方法(带条件),但随后我将得到一个非常肮脏的解决方案。基于段落ID查询具体类型会起作用,但我希望有更好的解决方案 我想查询一个站点,并显示一些特定于站点的数据和段落中的数据(Image段落、LinkList段落)。我不知道如何设置映射,使其

我刚开始使用实体框架,有以下问题:

我有一个包含导航属性段落的站点实体

我有多个应该从段落继承的实体(即Image段落、LinkList段落)

我想查询站点对象并访问其段落,并根据其具体类型(即Image段落、LinkList段落)使用它们

它将使用逐层次表的方法(带条件),但随后我将得到一个非常肮脏的解决方案。基于段落ID查询具体类型会起作用,但我希望有更好的解决方案

我想查询一个站点,并显示一些特定于站点的数据和段落中的数据(Image段落、LinkList段落)。我不知道如何设置映射,使其能够直接通过段落导航属性检索Image段落、LinkList段落对象

你将如何解决这个问题

ER图:


如果你想根据它们的具体类型使用它们,那听起来像是多态性的例子。。。你能(在部分类中)添加一些方法吗

partial class Paragraph {
    public abstract void Foo();
}
partial class ImageParagraph {
    public override void Foo() {/*code*/}
}
partial class LinkListParagraph {
    public override void Foo() {/*code*/}
}
否则,如果要过滤集合,可以使用类型的扩展方法,即

foreach(var imgPara in obj.Paragraphs.OfType<ImageParagraph>())
{ ... }
foreach(类型()的obj.段落中的var imgPara)
{ ... }
也许您也可以为上述对象添加属性(在父对象中),即

部分类站点{
公共可检索图像段落
{get{返回段落.of type();}}
公共可查询链接列表段落
{get{返回段落.of type();}}
}

谢谢。我的问题不清楚。我想做:var site=context.site.Include(“段落”)。其中(c=>c.SiteID==1)。First();foreach(site.parations中的var段落){do something};我的问题是,我不知道EDM中的映射(例如,每个层次的表都有条件)
partial class Site {
    public IQueryable<ImageParagraph> ImageParagraphs
    { get {return Paragraphs.OfType<ImageParagraph>(); }}

    public IQueryable<LinkListParagraph> LinkListParagraphs
    { get {return Paragraphs.OfType<LinkListParagraph>(); }}
}