Вот история: сайт (физическое местоположение интереса) имеет ноль или более контактов.Этими контактами являются люди, связанные с Компанией, которые уполномочены заниматься вопросами, касающимися Сайта.
Схема выглядит следующим образом:
Person -< CompanyContact -< CompanySiteContact >- Site
||
| -< PersonPhone
|
-< PersonAddress
Моя точка входа - Сайт.Мне нужен список контактов.Очень мало интересующих вас полевых данных, пока вы не доберетесь до Person.Итак, я хотел бы объединить Person, CompanyContact и CompanySiteContact в один класс домена.
Доступные варианты:
Создать один класс домена ииспользуйте объединения в карте FluentNH, чтобы сгладить слои при получении данных.Это никогда не звучало просто, и у меня возникают проблемы с многоуровневым соединением (если A присоединяется к B, присоединяется к C, вы не можете указать соединение с C в соединении с B).Тем не менее, я думаю, что, если возможно указать объединения, это будет единовременным решением, и в итоге это будет наиболее приемлемым решением.
Воспроизведите глубокую модель внабор "DTO", которые отображают 1: 1 в таблицы и могут быть переданы в конструктор "плоской" модели домена.Это работает, но похоже на читерство (нет проблемы, которую нельзя решить с помощью другого уровня абстракции, за исключением слишком большого количества уровней абстракции), и мой инстинкт подсказывает мне, что это в конечном итоге вызовет больше проблем, чем решит.
Реплицируйте модель домена 1: 1 со схемой и используйте сквозные свойства в CompanySiteContact для доступа к свойствам в недрах записи Person.Опять же, работает сейчас, но на самом деле это не решает проблему, и каждое новое свойство, которое становится интересным, потребует изменений в отображении, фактическом классе домена И классе домена верхнего уровня.Не очень твердое тело.
Итак, вопрос в том, как мне структурировать отображение?Как я уже сказал, я не могу указать соединение в соединении.Я думаю, что мне нужно сделать это - сопоставить PK каждой таблицы и использовать его в следующем соединении с верхнего уровня, но я не совсем уверен, как это настроить (не использовал FluentNH для настройкичто-нибудь близкое к этому комплексу раньше).