简单地说,我使用针对基类定义的存储库来加载从基类下降的对象。虽然我的对象是使用正确的后代类创建的,但是添加基类中没有的导航属性的任何后代类都没有加载那些相关的对象,我无法显式请求它们。
这是存储库类中的一个简单方法,它假定您知道其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
的另一个后代,虽然我认为这不重要)。
我的问题是,当Entity Framework代表我创建ReportIssued
的实例时,我总是希望它创建并加载ReportRequested
的相关实例,但因为我我在通用日历事件的上下文中创建事件,虽然我正确地返回ReportIssued
事件,但我无法指定.Include()
来获取相关对象。我想通过这种一般表达的搜索来做到这一点,因为我不一定知道eventId
事件的类型,而且还有其他几个" Get"返回CalendarEvent
后代集合的方法。
我使用Fluent API创建映射。我想我正在寻找的是在映射中表达相关对象总是需要的一些方法,或者,如果不这样,某种表达相同概念的装饰器。
我觉得很奇怪,当保存对象时,实体框架始终遍历整个图形,而在加载对象时它不会执行相同的操作。