0
我創建了一個流暢的NHibernate約定,將'Join'設置爲所有多對一關聯的獲取模式(在我看來,發送選擇時每個獲取1條記錄都沒有意義)。問題是一些實體有大量的列(遺留數據庫),我需要限制我創建的報告的結果集。NHibernate - 如何使用投影與關聯路徑來限制結果集?
請看下面的例子:
class X
{
public int Id {get;set;}
public virtual Y RefToY {get;set;}
...
}
class Y
{
public int Id {get;set;}
public virtual Z RefToZ {get;set;}
...
}
class Z
{
public int Id {get;set;}
public virtual String data1 {get;set;}
public virtual String data2 {get;set;}
public virtual String data3 {get;set;}
...
}
試想一下,除了我表現出的屬性,這些實體有200多個屬性,每個屬性映射成一列。假設我需要創建的報表基於X(意味着標準根植於X),我需要獲取X的'Id'屬性和Z的'data1','data2'和'data3'屬性顯示在DataGrid上。 用600列取結果集沒有意義,所以我需要使用Criteria API來指定我只需要那4列。我怎樣才能快速實現這一目標?我曾嘗試設置這樣的預測:
var crit = Session.CreateCriteria<X>().SetProjection(Projections.ProjectionList()
.Add(Projections.Property("Id"))
.Add(Projections.Property("RefToY.RefToZ.data1"))
.Add(Projections.Property("RefToY.RefToZ.data2"))
.Add(Projections.Property("RefToY.RefToZ.data3")));
,但是這導致的錯誤說:「RefToY.RefToZ.data1」 ...的屬性並不存在。這導致了我的問題。我如何使用NHibernate標準API來實現這一點?