Entity framework 加载不包含()的相关对象

Entity framework 加载不包含()的相关对象,entity-framework,Entity Framework,简单地说,我正在使用针对基类定义的存储库加载从基类派生的对象。尽管我的对象是使用正确的子类创建的,但是任何添加导航属性的子类(基类中不存在)都不会加载这些相关对象,并且我无法显式请求它们 下面是repository类中的一个简单方法,该方法加载给定的日历事件,前提是您知道其ID值: public CalendarEvent GetEvent(int eventId) { using (var context = new CalendarEventDbContext

简单地说,我正在使用针对基类定义的存储库加载从基类派生的对象。尽管我的对象是使用正确的子类创建的,但是任何添加导航属性的子类(基类中不存在)都不会加载这些相关对象,并且我无法显式请求它们

下面是repository类中的一个简单方法,该方法加载给定的日历事件,前提是您知道其ID值:

    public CalendarEvent GetEvent(int eventId)
    {
        using (var context = new CalendarEventDbContext(ConnectionString))
        {

            var result = (from evt in context.CalendarEvents
                          where eventId.Equals((int)evt.EventId)
                          select evt).ToList();

            return result.ToList()[0];
        }
    }
CalendarEvent
是一个基类,大量更具体的类从该基类派生而来。实体框架正确地确定由
eventId
指定的日历事件的实际类,并构造并返回该派生类。这很好用

然而,现在我有了
CalendarEvent
的后代,名为
ReportIssued
。这个对象引用了另一个名为
ReportRequest
(另一个
CalendarEvent
的后代,尽管我认为这并不重要)

我的问题是,当实体框架代表我创建
ReportIssued
的实例时,我总是希望它创建并加载
ReportRequested
的相关实例,但因为我是在一般日历事件的上下文中创建事件,尽管我正确地返回了
ReportIssued
事件,我无法指定
.Include()
来获取相关对象。我想通过这个一般表示的搜索来实现这一点,因为我不一定知道
eventId
的事件的类型,而且我还有几个其他的“Get”方法返回
CalendarEvent
子体的集合

我使用Fluent API创建映射。我想我要寻找的是某种方式,在映射中,表达相关的对象总是需要的,或者,如果没有,某种表示相同概念的装饰器


我觉得奇怪的是,在保存对象时,实体框架总是遍历整个图形,而在加载对象时,它却没有做到相同的效果。

您可以使用Include的字符串重载吗?不确定它是否有效,但可能是一个好的起点?另外,只需对您那里的代码进行注释-使用FirstOrDefault而不是ToList。FirstOrDefault将确保在数据库中使用SELECT TOP 1,而且该方法的实际作用更加明显!Dean:代码被简化了,如果没有返回任何内容,它实际上会检查并返回null。此外,我还尝试了字符串重载和实体框架检查基本类型,而不是最终实例化的类型,并且,唉,抛出了一个异常。唯一的选择是在返回之前检查该类型,并执行另一个查询以检索该特定类型的关系。。。很糟糕,但我认为你不能用任何其他方法来解决这个问题:(Slauma已经在这个问题上下了决心,但只取得了有限的成功。我们需要一个
Include()
方法。