2010-06-26 150 views
0

考虑一个由EmployeesAdministrators组成的应用程序。NHibernate视图映射

employeeEmployeeId,NameEmailAddress组成。

员工都存储在一个遗留系统,并只读的,所以我有一个不变的Employee类映射到一个视图(vw_Employee)如下:

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

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

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

[Administrators] -> EmployeeID(key) 

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

没有NHibernate我可以通过使用EmployeeID主键加入[Administrators]表和[vw_Employee]视图来获得管理员列表。

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

任何帮助,将不胜感激

回答

1

从一个角度OO点,管理员是不是雇员,但它与员工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); 
+0

所以,你会怎么弄不属于管理员员工名单 – kimsagro 2010-06-27 23:00:44