考虑一个由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进行映射。
非常感谢任何帮助
答案 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);