【发布时间】:2014-11-07 16:54:23
【问题描述】:
我有一个父子关系,我只想返回一个父级并加载所有子级。我使用条件是因为它是一个动态查询。
var messageQueueId = this.GetPropertyName<MessageQueue>(x => x.Id);
var query = _sessionManager.Session.CreateCriteria<MessageQueue>(QUEUE_ALIAS);
query.SetFirstResult(_pageOffset);
query.SetMaxResults(_pageSize);
query.Add(Restrictions.In(messageQueueId, _messageQueueIds));
query.List<MessageQueue>();
这会返回父级 (MessageQueue) 但不是子级 (SearchMatches)。
当我尝试这样做时:
var query = _sessionManager.Session
.CreateCriteria<MessageQueue>(QUEUE_ALIAS)
.CreateAlias(this.GetPropertyName<MessageQueue>(x => x.SearchMatches)
, MATCH_ALIAS, JoinType.LeftOuterJoin);
然后我加载了孩子,但我也收到了重复的父母。我明白为什么会这样。但是我不明白如何让第一个场景自动加载 SearchMatches?
这是我的实体:
public class MessageQueue : EntityBase
{
...
public virtual IList<SearchMatch> SearchMatches { get; set; }
...
}
public class SearchMatch : EntityBase
{
...
public virtual MessageQueue MessageQueue { get; set; }
...
}
Fluent NHibernate 设置为DefaultCascade.All()。我对这些对象没有其他覆盖。
我尝试在 MessageQueue 覆盖之外使用 Inverse() 和 Not.LazyLoad()。还尝试从 CreateAlias 中删除 EagerLoad。但我仍然没有得到我需要的东西。
【问题讨论】:
标签: c# nhibernate fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping