1

我有这堂课:

public Customer
{
   public int CustomerId {get;set;}
   ....
   public List<Order> OrderList {get;set;}
}

我想使用 NHibernate CreateSQLQuery 编写这个 SQL 查询

SELECT C.CustomerId, .... O.OrderId, O.OrderDate, O.OrderTotal.....
FROM Customers C
    LEFT OUTER JOIN Orders O ON C.CustomerID = O.CustomerID

我如何使这种转换工作:

 .SetResultTransformer(Transformers.AliasToBean<Customer>())

它是否包含每个客户对象中的订单列表?

谢谢

4

2 回答 2

0

如果可以,请使用命名查询。

<sql-query name="myQuery">
  <return alias="c" class="Customer" />
  <return-join alias="o" property="c.Orders" />
  <![CDATA[
   SELECT {c.*}, {o.*} FROM Customers c LEFT OUTER JOIN Orders o ON c.CustomerId = o.CustomerId
  ]]>
</sql-query>

和被 NHibernate 理解并在会话构建时替换为实际列{c.*}{o.*}另一个优点是您可以在应用程序启动时预编译这些查询。

  var results = session.GetNamedQuery("myQuery").List<Customer>();
于 2013-03-14T11:04:33.027 回答
0

假设结果映射的所有列名都映射到实体的属性名,您可以尝试:

var myQuery = @"SELECT C.CustomerId, .... O.OrderId, O.OrderDate, O.OrderTotal.....
                   FROM Customers C
                   LEFT OUTER JOIN Orders O ON C.CustomerID = O.CustomerID";

myNHSession.CreateSQLQuery(myQuery)
           .AddEntity("C",typeof(Customer))
           .AddJoin("O","C.OrderList")
           .List();

希望这会有所帮助

于 2013-03-14T09:15:09.680 回答