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

また、各 Customer オブジェクト内に Orders のリストが含まれていますか?

ありがとう

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>

{c.*}とは{o.*}NHibernate によって理解され、セッションのビルド時に実際の列に置き換えられます。もう 1 つの利点は、アプリケーションの起動時にこれらのクエリをプリコンパイルできることです。

  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 に答える