Как nhibernate будет обрабатывать таблицы, которые сами по себе не являются сущностями? - PullRequest
0 голосов
/ 18 июля 2009

Я понимаю, как nhibernate отобразит таблицу, такую ​​как Users и Addresses.

Но что, если у меня есть стол вроде:

Users_Address со столбцами UserID, AndressID.

Должен ли я создать для этого отображение и сделать его похожим на обычную сущность? Это действительно таблица, на которую я бы ссылался во внутреннем соединении.

Ответы [ 2 ]

4 голосов
/ 18 июля 2009

С помощью NHibernate вы создаете свой код независимо от макета базы данных. Вам не нужно (и не нужно) создавать классы, точно такие же, как таблицы и столбцы вашей базы данных. Пример:

public class User
{
    public IList<Address> Addresses { get; private set; }

    public int Id { get; set; }
}

Отображение зависит от отношения между адресом и пользователем:

  • Может ли пользователь иметь несколько адресов?
  • Могут ли несколько пользователей иметь один и тот же адрес?
  • Что вы хотите, чтобы внутреннее соединение на что? (Я бы ожидал много ко многим отношения здесь с внешним соединением)

В сценарии, когда у пользователя несколько адресов, и эти адреса могут использоваться разными пользователями, вы можете использовать сопоставление «многие ко многим» для сопоставления адреса. Сопоставление также зависит от того, как вы хотите создать свои классы пользователей и адресов.

  • Логично ли иметь список адресов у пользователя?
  • Логично ли иметь список пользователей в адресе?
  • Может ли пользователь иметь один и тот же адрес дважды?

Идея NHibernate заключается в следующем: написать код так, как вам нравится, и добавить отображение в базу данных позже.

0 голосов
/ 20 июля 2009

Адрес обычно рассматривается как тип значения в обсуждаемом сценарии - он не имеет внутренней идентичности за пределами пользователя.

Типы значений в nHibernate отображаются как компоненты. Коллекции типов значений отображаются как набор составных элементов.

Подробнее о том, как это сделать, см. https://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/components.html.

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