NHibernate JoinAlias 多次收集
NHibernate JoinAlias on collection multiple times
我在 Postgre 9.2 中使用 NHibernate 3.33 和 QueryOver。
我有两个实体:
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; }
}
具有关联 - 一对多(我没有将其他字段附加到实体,例如上面的代码片段的 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>()
我有错误:
'duplicate association path:Reports'.
是否可以避免这个问题或者这是 HNibernate 的限制?
回答你的问题:
...Is it possible to avoid this problem or it's a limitation of HNibernate?
不得不说NO。
有关更多信息,请参阅类似的问答:Rename NHibernate criteria
我们不查询数据库,不使用 SQL (这确实允许做很多事情)。在这里,我们使用 "mapped" 域模型,这可能会带来一些限制 - 正如此处讨论的那样...
如果这有帮助,解决方法是将 属性 映射两次并使用 WHERE 子句:6.2. Mapping a Collection
where=""
(optional) specify an arbitrary SQL WHERE condition to be used when retrieving or removing the collection (useful if the collection should contain only a subset of the available data)
我在 Postgre 9.2 中使用 NHibernate 3.33 和 QueryOver。 我有两个实体:
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; }
}
具有关联 - 一对多(我没有将其他字段附加到实体,例如上面的代码片段的 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>()
我有错误:
'duplicate association path:Reports'.
是否可以避免这个问题或者这是 HNibernate 的限制?
回答你的问题:
...Is it possible to avoid this problem or it's a limitation of HNibernate?
不得不说NO。
有关更多信息,请参阅类似的问答:Rename NHibernate criteria
我们不查询数据库,不使用 SQL (这确实允许做很多事情)。在这里,我们使用 "mapped" 域模型,这可能会带来一些限制 - 正如此处讨论的那样...
如果这有帮助,解决方法是将 属性 映射两次并使用 WHERE 子句:6.2. Mapping a Collection
where=""
(optional) specify an arbitrary SQL WHERE condition to be used when retrieving or removing the collection (useful if the collection should contain only a subset of the available data)