EF4 - Самостоятельное отслеживание сущностей, наследование и активная загрузка - PullRequest
0 голосов
/ 04 ноября 2010

Я знаю, что раньше об этом спрашивали несколькими способами, но ни один из ответов не кажется мне подходящим - или правильным - или текущим, поэтому я попробую еще раз.

У меня есть большая модель с несколькими экземплярами унаследованных объектов. Одним из примеров является расписание, которое содержит коллекцию TimetableEvents. Существует несколько подтипов TimetableEvent, таких как InterviewTimetableEvent, BreakTimetableEvent и ExercisetimeTableEvent. ExerciseTimetableEvent связан с сущностью Exercise.

Мне нужно использовать объекты самоконтроля, поскольку я использую серверную часть 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.

Приветствия

Ответы [ 2 ]

2 голосов
/ 04 ноября 2010

Это немного сложно, но возможно:

var tt = (from s in ESSDataContainer.Timetables
          where s.TimetableId == timetableid
          select new 
          {
              TimeTable = s,
              Events = s.TimeTableEvents,
              Exercise = s.TimeTableEvents.OfType<ExerciseTimetableEvents>()
                                          .Select(ett => ett.Exercise)
          }).Select(s => s.TimeTable)
            .AsEnumerable()
            .FirstOrDefault();

Ясно, как грязь, но, эй: никаких волшебных струн! Кроме того, у него есть то преимущество, что оно действительно работает ....

0 голосов
/ 12 ноября 2010

Есть предложение для этого выпуска в Microsoft Connect :.Если вы считаете это достойным, вы можете проголосовать за него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...