【问题标题】:NHibernate View MappingNHibernate 视图映射
【发布时间】:2011-12-10 23:15:05
【问题描述】:

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

employeeEmployeeIdNameEmailAddress 组成。

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

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

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

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

[Administrators] -> EmployeeID(key)

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

如果没有 NHibernate,我可以通过使用 EmployeeID 主键将 [Administrators] 表与 [vw_Employee] 视图连接起来来获取管理员列表。

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

任何帮助将不胜感激

【问题讨论】:

    标签: nhibernate nhibernate-mapping


    【解决方案1】:

    从OO的角度来看,Administrator不是员工,但与员工是一对一的关系。

    因此,您的课程将是:

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

    【讨论】:

    • 那么您如何获得非管理员员工的列表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    相关资源
    最近更新 更多