NHibernate JoinAlias多次收集

时间:2015-01-13 01:35:39

标签: nhibernate nhibernate-mapping queryover

我使用NHibernate 3.33和QueryOver和Postgre 9.2。 我有两个实体:

public class User {
    public virtual string Name { get; set; }
    public virtual IList<Reports> Reports { get; set; }
}

public class Report {
    public virtual string Type { get; set; }
    public virtual DateTime ReportDate { get; set; }
    public virtual User Author { get; set; }
}

with association - one-to-many(我没有将附加字段附加到像Id或Name这样的实体到上面的片段)。一些报告的类型是可用的 - 月,日。 我的目标是获取用户摘要 - 找出用户是否有当天的日报和月报。

注意:月报的ReportDate看起来像月的第一天。另外我想把它作为一行(如果它是一个SQL)转换为dto:

public class UserSummaryDto {
    public bool HasDayReport { get; set; }
    public bool HasMonthReport { get; set; }
}

为了实现我的目标,我尝试了以下方法:

Report dayReport = null;
Report monthReport = null;
var currentDay; // some value of current day
var firstDay; // some value of first day of month
var report = session.QueryOver<User>
    .Left.JoinAlias(u => u.Reports, () => dayReport, r => r.ReportDate == currentDay)
    .Left.JoinAlias(u => u.Reports, () => monthReport, r => r.ReportDate == firstDat)
    .SelectList(
        // some logic to check whether user has reports
.TransformUsing(Transformers.AliasToBean<UserSummaryDto>())
.List<UserSummaryDto>()

我有错误:

  

&#39;重复的关联路径:报告&#39;。

是否可以避免这个问题,或者它是HNibernate的限制?

1 个答案:

答案 0 :(得分:1)

回答你的问题:

  

...是否可以避免此问题或者是HNibernate的限制?

不得不说

有关更多信息,请参阅类似的Q&amp;答:Rename NHibernate criteria

我们不是在查询数据库,而是使用SQL (它允许做很多事情)。在这里,我们使用“映射”域模型,这可能会带来一些限制 - 正如这里讨论的那样......

如果这有帮助,解决方法是两次映射此类属性并使用WHERE子句:6.2. Mapping a Collection

  

where="" (可选)指定在检索或删除集合时使用的任意SQL WHERE条件(如果集合应仅包含可用数据的子集,则非常有用) )