Еще один свободный вопрос о присоединении к NH - PullRequest
1 голос
/ 10 декабря 2010

У меня есть сайт. этот сайт находится в определенном часовом поясе и имеет определенный тип подключения к Интернету. Оба эти свойства хранятся в таблице сайта БД как внешние ключи к записям в отдельной таблице поиска. Я бы никогда не сделал это таким образом, но я понимаю, почему (применяет общий набор имен, дает СЛИШКОМ меньший размер БД, позволяет в некоторых случаях нормализовать дополнительную информацию и позволяет легко получить список значений для использования в качестве DDL).

Я строю отображение, которое должно включать поиск этой информации. Я хотел бы избежать создания объекта домена и сопоставления для одного поля (которое, в некоторых случаях, кроме идентификатора таблицы поиска, вот и все), поэтому вместо этого я хотел бы денормализовать отношения и просто иметь строковое значение на объекте. Простая цель.

Проблема в том, что соединение, которое я пытаюсь использовать, предполагает, что первичный ключ таблицы сайта указан где-то в таблице поиска; по сути, мы предполагаем, что сайт находится на «единственной» стороне отношений, что является неточным. Вот соответствующие линии отображения:

Id(x=>x.Id).Column("SiteID");

...

Join("lu_TimeZone", j =>
{
   j.KeyColumn("TimeZoneID");
   j.Map(x => x.TimeZone).Column("TimeZone");
});

Сгенерированный SQL включает соединение:

FROM Site this_0_ 
inner join lu_TimeZone this_0_1_ 
   on this_0_.SiteID=this_0_1_.TimeZoneID

* зуммер * Извините, это неправильно, спасибо за игру. Объединение должно быть:

FROM Site this_0_ 
inner join lu_TimeZone this_0_1_ 
   on this_0_.TimeZoneID=this_0_1_.TimeZoneID

Однако, похоже, нет способа сказать Fluent использовать KeyColumn в качестве имени столбца с обеих сторон объединения. Отменить сопоставление для присоединения TimeZone к сайту невозможно, так как существует несколько соединений с сайта на другие таблицы поиска.

1 Ответ

0 голосов
/ 15 декабря 2010

Как эпитафия, я закончил тем, что сделал одну из двух вещей:

  • Для таблиц, где было только одно поле, которое могло бы быть интересным, я создал перечисление, привязанное к идентификатору таблицы, и сопоставил их с перечислениями с использованием пользовательского типа.

  • Для таблиц, в которых может быть более одного значения, я создал и отобразил объект домена.

Может быть невозможно заставить работать поведение соединения, как описано выше, без ссылки на подтаблицу как на объект в любом случае.

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