2010-08-04 119 views
0

代替使用方法,這工作:NHibernate的投影查詢DTO,在財產

projections.Add(Projections.Property(Member<MailOrder>.From(x => x.AssigneeCode).QualifiedPath), Member<MailOrderItem>.From(x => x.AssigneeCode).Path); 
    projections.Add(Projections.Property(Member<MailOrder>.From(x => x.AssigneeName).QualifiedPath), Member<MailOrderItem>.From(x => x.AssigneeName).Path); 
    projections.Add(Projections.Property(Member<MailOrder>.From(x => x.AssigneeType).QualifiedPath), Member<MailOrderItem>.From(x => x.AssigneeType).Path);    

這不偏離航向

projections.Add(Projections.Property(Member<IMailOrderAssignee>.From(x => x.AssigneeCode).QualifiedPath), Member<MailOrderItem>.From(x => x.Code).Path); 
projections.Add(Projections.Property(Member<IMailOrderAssignee>.From(x => x.AssigneeName).QualifiedPath), Member<MailOrderItem>.From(x => x.GetName()).Path); 
projections.Add(Projections.Property(Member<IMailOrderAssignee>.From(x => x.AssigneeType).QualifiedPath), Member<MailOrderItem>.From(x => x.GetType()).Path);    

這並不是因爲兩件事情的工作:

  1. 該接口沒有殘留物
  2. 方法以屬性方式使用。

我在Nhiberante的世界裏搜尋了很多,但在我看來這是相當困難的。

的IMailOrderAssignee是兩個rootentity的(姑且稱之爲RootX和樂蒂)的接口。在我的MailOrders環境中,只要我有一個對它的引用+名稱及其代碼和電子郵件地址,它的根是什麼並不重要。

IMailOrderAssignee與映射文件中的any標籤映射。 (這很好,但我也可以用鑑別器來做)。

我的問題:

  1. 是否有可能使用結果的方法 在投影查詢,以便 的結果是DTO?

  2. 是否有可能在投影querys使用合同 (我猜 不...)

回答

1

爲什麼不這樣做投影的記憶?

例子:

var criteria = someCriteriaThatReturnsPersistentEntities; 
var items = criteria.List<IMailOrderAssignee>(); 
var projected = items.Select(i => new 
            { 
             Prop1 = i.SomeMethod(), 
             Etc 
            }); 
+0

是的,這可以幫助。 但我也有使用標籤的另一個問題。 它將FK限制僅限於其中一個表格。 所以,我退後一步,等一下,看到我看到這個<>。這不是他們分享的數據,而是行爲。我只分享了ID ...並且這是不正確的... MailOrders共享了一切,除了引用之外,所以我使用了Inheritence映射。 感謝您的回答,雖然我從中學到了一些東西=>在投影查詢本身中是不可能的,但之後我可以做我的東西:D – kriebb 2010-08-12 08:16:43