2010-08-04 80 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