【问题标题】:Map SQL Query to Business object in Nhibernate将 SQL 查询映射到 Nhibernate 中的业务对象
【发布时间】:2011-05-12 14:15:02
【问题描述】:

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

这是我的 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>

我已经制作了构造函数来映射这些列

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

DB Employee 表列名: Eid、FirstName、LastName、............

我遇到了这个异常

无法执行查询 [从员工emp中选择(emp.Eid)作为Eid1_0_,(emp.FirstName)作为FirstName1_0_,(emp.LastName)作为LastName1_0_

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

感谢您的帮助。

【问题讨论】:

    标签: c# asp.net nhibernate


    【解决方案1】:

    我认为您会从使用 NHibernate 的 ad-hoc mapping 功能中受益:

    命名查询:

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

    【讨论】:

    • 感谢您的回复。请再次阅读我的问题,然后回复。
    • 这不是我的问题的解决方案。因为我问的是不同的事情和我的结构,但你的回答完全不同。
    • 我的答案有什么不同?我将 SQL 结果映射到 Employee 对象。我们至少可以看看您是如何制定查询的吗?
    • 顺便说一句,你需要给我们内部异常,而不仅仅是第一个。
    • Eek,主要时区差异 + 没有“Skype”硬件。更新你的帖子。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 2014-02-11
    相关资源
    最近更新 更多