NHibernate View Mapping - PullRequest
       1

NHibernate View Mapping

0 голосов
/ 26 июня 2010

Рассмотрим приложение, состоящее из Employees и Administrators.

employee состоит из EmployeeId, Name и EmailAddress.

Сотрудники хранятся в устаревшей системе и доступны только для чтения, поэтому у меня есть неизменный класс Employee, сопоставленный с представлением (vw_Employee) следующим образом:

[vw_Employee] -> EmployeeID(key), Name, EmailAddress

Теперь для этого приложения некоторые сотрудники будут помечены как администраторы (представьте себе экран с выпадающим списком сотрудников, выберите его, нажмите «Добавить», и этот сотрудник теперь является администратором).

Администратор - это сотрудник (имеет те же поля), поэтому таблица базы данных должна выглядеть следующим образом:

[Administrators] -> EmployeeID(key)

В том же приложении мне нужно будет отобразить список всех имен администраторов и адрес электронной почты

Без NHibernate я мог бы получить список администраторов, присоединив таблицу [Administrators] к представлению [vw_Employee] с использованием первичного ключа EmployeeID.

Проблема, с которой я столкнулся, заключается в том, как должен выглядеть класс Administrator, и как бы я отобразил это с помощью NHibernate.

Любая помощь будет высоко ценится

1 Ответ

1 голос
/ 26 июня 2010

С точки зрения ОО, Администратор не является сотрудником, но имеет отношение 1-1 к сотруднику.

Итак, ваши уроки будут:

public class Employee
{
    ...
}

public class Administrator
{
    public virtual TypeOfEmployeeId Id { get; protected set; }
    public virtual Employee Employee { get; set; }
}

Поскольку сотрудник является неизменным, не имеет значения, что это представление.

Отображение тоже просто:

<class name="Administrator">
  <id name="Id">
    <generator class="foreign">
      <param name="property">Employee</param>
    </generator>
  </id>
  <one-to-one name="Employee"/>
</class>

И использование не может быть проще:

Employee employee = GetTheEmployee();
var administrator = new Administrator { Employee = employee };
session.Save(administrator);
...