首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NHibernate视图映射

NHibernate视图映射
EN

Stack Overflow用户
提问于 2010-06-26 20:36:53
回答 1查看 1.1K关注 0票数 0

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

employeeEmployeeIdNameEmailAddress组成。

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

代码语言:javascript
运行
复制
[vw_Employee] -> EmployeeID(key), Name, EmailAddress

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

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

代码语言:javascript
运行
复制
[Administrators] -> EmployeeID(key)

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

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

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

任何帮助都将不胜感激

EN

回答 1

Stack Overflow用户

发布于 2010-06-27 00:12:41

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

因此,您的类将是:

代码语言:javascript
运行
复制
public class Employee
{
    ...
}

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

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

映射也很简单:

代码语言:javascript
运行
复制
<class name="Administrator">
  <id name="Id">
    <generator class="foreign">
      <param name="property">Employee</param>
    </generator>
  </id>
  <one-to-one name="Employee"/>
</class>

用法再简单不过了:

代码语言:javascript
运行
复制
Employee employee = GetTheEmployee();
var administrator = new Administrator { Employee = employee };
session.Save(administrator);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3123884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档