考虑一个由Employees
和Administrators
组成的应用程序。
employee
由EmployeeId
、Name
和EmailAddress
组成。
员工存储在遗留系统中,并且是只读的,因此我将一个不可变的Employee
类映射到一个视图(vw_Employee
),如下所示:
[vw_Employee] -> EmployeeID(key), Name, EmailAddress
现在,对于这个应用程序,一些员工将被标记为管理员(想象一个带有员工下拉列表的屏幕,您选择一个员工,单击add,该员工现在是管理员)。
管理员是一名员工(具有完全相同的字段),因此数据库表只需如下所示:
[Administrators] -> EmployeeID(key)
在同一应用程序中,我需要显示所有管理员姓名和电子邮件地址的列表
如果没有NHibernate,我可以通过使用EmployeeID
主键将[Administrators]
表与[vw_Employee]
视图连接起来,从而获得一个管理员列表。
我遇到的问题是Administrator
类应该是什么样子,以及我如何使用NHibernate映射它。
任何帮助都将不胜感激
发布于 2010-06-26 16:12:41
从OO的角度来看,管理员不是员工,但它与员工有一对一的关系。
因此,您的类将是:
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);
https://stackoverflow.com/questions/3123884
复制相似问题