NHibernate视图映射

时间:2010-06-26 12:36:53

标签: nhibernate nhibernate-mapping

考虑一个由EmployeesAdministrators组成的应用程序。

employeeEmployeeIdNameEmailAddress组成。

员工存储在遗留系统中并且是只读的,因此我有一个映射到视图(Employee)的不可变vw_Employee类,如下所示:

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

现在,对于这个应用程序,一些员工将被标记为管理员(图像是一个带有下拉员工列表的屏幕,您选择一个,单击添加,该员工现在是管理员)。

管理员是员工(具有完全相同的字段),因此数据库表只需要如下所示:

[Administrators] -> EmployeeID(key)

在同一个应用程序中,我需要显示所有管理员名称和电子邮件地址的列表

如果没有NHibernate,我可以使用[Administrators]主键将[vw_Employee]表与EmployeeID视图一起加入管理员列表。

我遇到的问题是Administrator类应该是什么样的,我将如何使用NHibernate进行映射。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

从OO的角度来看,管理员不是员工,但与员工有1-1的关系。

所以,你的课程将是:

public class Employee
{
    ...
}

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

由于Employee是不可变的,所以它是一个视图并不重要。

映射也很简单:

<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);