我知道这已经以几种方式问过,但没有一个答案似乎适用于我 - 或正确 - 或最新,所以我会再试一次。EF4 - 自我跟踪的实体和继承和热切加载
我有一个很大的模型,有几个物体的继承实体。一个示例是包含TimetableEvent集合的时间表。 TimetableEvent有几种子类型,如InterviewTimetableEvent,BreakTimetableEvent和ExercisetimeTableEvent。 ExerciseTimetableEvent与练习实体有关系。
我需要使用自我跟踪实体,因为我使用WCF后端以无状态方式向多个WPF客户端提供数据。
所以,我需要加载一切,我认为自我跟踪的实体会自动做到这一点,但它似乎没有。
因此,要获得一个时间表,我需要做这样的事情:
var tt = (from s in ESSDataContainer.Timetables
.Include("TimetableEvents")
where s.TimetableId == timetableid
select s).FirstOrDefault();
这会给我TimetableEvents但不是都跟ExerciseTimetableEvents练习。我试过以下(和几个其他建议),但没有运气:
var tt = (from s in ESSDataContainer.Timetables
.Include("TimetableEvents")
.Include("ExerciseTimetableEvents.Exercise")
where s.TimetableId == timetableid
select s).FirstOrDefault();
有没有解决方案呢?
如果没有,我会回到正常的上下文跟踪,并从本地容器连接到数据库,而不是使用WCF。
干杯
作为一个简要说明,我只想补充一点,经过多年来多次尝试使数据访问变得简单易行,微软(以及几乎所有其他人)都失败了!这总是比应该更难。这应该是诺贝尔奖......那么我们可能会看到一些真正易用的东西! – Jonesie 2010-11-04 05:54:14
做这样的陈述时要小心,你会在这里引起骚乱。和你的Q一样,我遇到了同样的问题。你不能急于加载派生关系,因为你不知道它的类型。我发现的唯一解决方案是将导航移至父级或2个数据库调用。 – RPM1984 2010-11-04 09:23:13
@ RPM1984查看我的答案,了解没有模式更改或多次调用的解决方案。 – 2010-11-04 14:50:03