多次在集合上使用NHibernate JoinAlias

多次在集合上使用NHibernate JoinAlias,nhibernate,nhibernate-mapping,queryover,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; } } 使用关联-一对多(我没有将Id或名称等附加字段附加到上面的代码片段中)。某些报表的类型可用-月、日。 我的目标是为用户获取摘要-找出用户

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

public class User {
    public virtual string Name { get; set; }
    public virtual IList<Reports> Reports { get; set; }
}
使用关联-一对多(我没有将Id或名称等附加字段附加到上面的代码片段中)。某些报表的类型可用-月、日。 我的目标是为用户获取摘要-找出用户是否有当天的日报表和月报表

注意:月报的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>()
Report dayReport=null;
报告monthReport=null;
var currentDay;//今天的一些价值
var firstDay;//月初一的某些值
var report=session.QueryOver
.Left.JoinAlias(u=>u.Reports,()=>dayReport,r=>r.ReportDate==currentDay)
.Left.JoinAlias(u=>u.Reports,()=>monthReport,r=>r.ReportDate==firstDat)
.选择列表(
//检查用户是否有报告的一些逻辑
.TransformUsing(Transformers.AliasToBean())
.List()
我有一个错误:

“重复关联路径:报告”


是否有可能避免此问题,或者这是HNibernate的限制?

回答您的问题:

…是否有可能避免此问题,或者这是HNibernate的限制

必须说“不”

有关更多信息,请参见类似问答:

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

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

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


好的。很清楚,我怀疑。谢谢你的解释!
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>()