NHibernate - 通过ID属性加入,而不是对象

时间:2015-11-18 00:00:47

标签: c# sql-server join nhibernate mapping-by-code

我有以下表格:

Customer(ID, Name)
Transaction(ID, CustomerID, Date)

表的映射对象是在没有对象的情况下定义的,只有原始类型:

Customer(int ID, string Name)
Transaction(int ID, string CustomerID, DateTime Date)

我想按升序选择所有客户及其上次购买日期。我尝试使用别名并使用客户ID和交易的客户ID创建连接,但我得到一个例外

  

无法解析财产:客户:交易

Transaction transaction = null;
Customer customer = null;

session.QueryOver<Transaction>(() => transaction).
                SelectList(list => list.
                    Select(() => customer.Name).
                    SelectGroup(() => transaction.CustomerId).
                    SelectMin(() => transaction.Date)).
                JoinQueryOver(() => customer).Where(() => customer.Id == transaction.Id).
                OrderBy(Projections.Min<Transaction>(trans => trans.Date)).Asc.
                List<object[]>().
                ToList();

我不明白为什么它试图在交易中寻找一个客户财产,他们唯一一个在一行中的情况是在where子句中。我可能没有那么好地加入。

有人可以解释这个例外吗?

1 个答案:

答案 0 :(得分:0)

错误的来源似乎是这个电话:JoinQueryOver(() => customer) 它告诉NHibernate尝试找到Transaction类的名为“customer”的属性。

我相信你的查询应该是这样的:

session.QueryOver<Transaction>(() => transaction).
SelectList(list => list.
    SelectSubQuery(QueryOver.Of<Customer>().Where(c => c.ID == transaction.ID).Select(c => c.Name)).
    SelectGroup(() => transaction.CustomerId).
    SelectMin(() => transaction.Date)
).
.OrderBy(Projections.Min<Transaction>(trans => trans.Date)).Asc.
List<object[]>().
ToList();