【问题标题】:Nhibernate Projection Query DTO, use method in stead of propertyNhibernate Projection Query DTO,使用方法代替属性
【发布时间】:2011-03-25 03:37:27
【问题描述】:

这行得通:

    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. 方法以 Property 方式使用。

我在 Nhiberante 的世界中搜索了很多,但在我看来这很难。

IMailOrderAssignee 是两个根实体(我们称它们为 RootX 和 RootY)的接口。在我的 MailOrders 的上下文中,它是什么根并不重要,只要我有对它的引用 + 名称以及它的代码和电子邮件地址。

IMailOrderAssignee 使用映射文件中的 any - 标记进行映射。 (效果很好,但我也可以使用鉴别器)。

我的问题:

  1. 是否可以使用结果 投影查询中的方法,所以 结果在 DTO 中?

  2. 是否可以使用合约 在投影查询中(我猜 不是……)

【问题讨论】:

    标签: c# nhibernate .net-3.5 interface .net-2.0


    【解决方案1】:

    为什么不在内存中做投影?

    例子:

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

    【讨论】:

    • 是的,这会有所帮助。但是我在使用 标签时也遇到了另一个问题。它仅对其中一个表设置了 FK 约束。于是,我退缩了,稍等片刻,发现我看到了这个>。他们共享的不是数据,而是行为。我只共享了 ID……这是不对的…… MailOrders 共享了所有内容,除了那里的引用,所以我使用了继承映射。不过感谢您的回答,我从中学到了一些东西=>投影查询本身是不可能的,但是之后我可以做我的事情:D
    猜你喜欢
    • 2013-04-02
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    相关资源
    最近更新 更多