EF4: Разделение таблицы на две сущности с использованием POCO - почему я получаю исключение? - PullRequest
3 голосов
/ 17 марта 2011

У меня есть одна таблица "Курсы" , сопоставленные двум сущностям "Курс" и "CourseDetails" .Оба имеют классы POCO с виртуальными навигационными свойствами.Оба объекта используют один и тот же идентификатор (идентификатор на курсе, но не на CourseDetail).Сопоставление между сущностями является « ограничением ссылочной целостности », а не окном «сопоставлений».Конечно, принцип в ограничении.

Я использую LazingLoading и ProxyCreationEnabled .

После вызова context.SaveChanges () соединения выглядят нормально (идентификаторы, ссылки и данные).

При доступе к course.CourseDetails из цикла в контексте. Курсы Я получаю пустые CourseDetails по умолчанию, созданные конструктором Course вместо фактических данных CourseDetails !?

Когда я вызываю context.LoadProperty (course, c => c.CourseDetails) Я получаю InvalidOperationException с сообщением:

" Нарушено ограничение множественности. Роль 'CourseDetails' отношения 'OrmComparisons.EFPocos1.CourseDetailsCourse' имеет кратность 1 или 0..1. "

Вопрос 1: Почемутакое конечно. Курс детализации пуст?Вопрос 2: Почему я получаю исключение?Вопрос 3: Что мне делать вместо этого?

Я могу поделиться файлом решения + файл sql, если кто-то захочет посмотреть.

1 Ответ

0 голосов
/ 21 марта 2011

После сравнения самописных POCO с POCO, сгенерированными по шаблону,Я заметил методы Fix___, которые предназначены для исправления навигационных свойств.Некоторые как все другие типы отношений (один ко многим, много ко многим, наследование)работа с виртуальными свойствами и ленивая загрузка.Только таблица разделяется на отношение «один к одному».

В любом случае - исправление использовало POCO, сгенерированные t4, а не POCO, написанные самим собой с простым {get;задавать;} свойства.

...