将 SQL 查询映射到 Nhibernate 中的业务对象

本文关键字:业务 对象 Nhibernate SQL 查询 映射 | 更新日期: 2023-09-27 17:56:11

我想使用 Nhibernate 将 SQL 查询映射到Business object。员工表中有很多字段,但我只得到三个,只想映射那些。

这是我的 SQL 查询

<sql-query  name="findEmployeesInfo">
<return alias="emp" class="Calibr.BusinessDocuments.BOs.Employee, BusinessDocuments"/>
<![CDATA[
  select (emp.Eid) as {emp.Id},(emp.FirstName) as {emp.FirstName},(emp.LastName) as {emp.LastName} from Employee emp
 ]]>
</sql-query>

这是我有 make 构造函数来映射这些列

public Employee(int Id, string FirstName, string LastName)
{
    this.Id = Id;
    this.FirstName = FirstName;
    this.LastName = LastName;            
}

DB 员工表 列名称:开斋节、名字、姓氏,............

我收到此异常

无法执行查询 [ 选择 (emp.开斋节)作为Eid1_0_,(emp.名字)作为FirstName1_0_,(emp.姓氏)作为员工 emp 的LastName1_0_

编辑:如果我选择所有列,它将完美工作 - Select * from Employee emp

感谢您的帮助。

将 SQL 查询映射到 Nhibernate 中的业务对象

我认为你会从使用NHibernate的临时映射功能中受益:

命名查询:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <sql-query name="findEmployeesInfo">
      select emp.Eid as Id, emp.FirstName FirstName, emp.LastName as LastName from Employee emp
    </sql-query>
</hibernate-mapping>

员工类别:

public class Employee
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    // etc...
}

即席查询:

IList<Employee> employees = session
                              .GetNamedQuery("findEmployeesInfo")
                              .SetResultTransformer(Transformers.AliasToBean(typeof(Employee)))
                              .List<Employee>();