当前位置: 首页 > 编程语言 > C#

NHibernate标准加载具有不同父级的所有子级?分享

时间:2023-04-10 20:26:47 C#

NHibernate标准与不同的父母加载所有孩子?我有父子关系,我只想返回一个父项并加载所有子项。我正在使用条件,因为它是一个动态查询。varmessageQueueId=this.GetPropertyName(x=>x.Id);varquery=_sessionManager.Session.CreateCriteria(QUEUE_ALIAS);query.SetFirstResult(_pageOffset);query.SetMaxResults(_pageSize);query.Add(Restrictions.In(messageQueueId,_messageQueueIds));查询列表();这将返回父项(MessageQueue),但不返回其子项(SearchMatches)。当我尝试这样做时:varquery=_sessionManager.Session.CreateCriteria(QUEUE_ALIAS).CreateAlias(this.GetPropertyName(x=>x.SearchMatches),MATCH_ALIAS,JoinType.LeftOuterJoin);然后我得到了孩子,但我也得到了重复的父母。我明白为什么会这样。但是不明白如何让第一个场景自动加载SearchMatches?这是我的权利:publicclassMessageQueue:EntityBase{...publicvirtualIListSearchMatches{get;放;}...}publicclassSearchMatch:EntityBase{...publicvirtualMessageQueueMessageQueue{get;放;}...FluentNHibernate设置为DefaultCascade.All()。这些物品我没有其他替代品。我正在尝试使用MessageQueue覆盖的Inverse()和Not.LazyLoad()。还尝试为CreateAlias关闭EagerLoad。但我仍然没有得到我需要的东西。我建议使用batch-size=""设置。它将以1)我们发出的一个查询(query.List();)结束,以及2)NHibernate将使用一个(或多个)查询为每个返回的MessageQueue加载集合。19.1.5。使用批量获取NHibernate可以高效地使用批量获取,也就是说,如果访问一个代理(或集合),NHibernate可以加载几个未初始化的代理。批量抓取是惰性选择抓取策略的一种优化。有两种方法可以调整批量获取:在类和集合级别。批量获取类/实体更容易理解。假设您在运行时遇到以下情况:您在一个ISession中加载了25个Cat实例,每个Cat都有一个对其所有者的引用,它是一个Person。Person类使用代理映射,lazy="true"。如果您现在遍历所有猫并在每只猫上调用cat.Owner,NHibernate将默认执行25条SELECT语句来检索代理所有者。您可以通过在Person的地图中指定批量大小来调整此行为:...一个流畅的替代方法是(集合和类).BatchSize(25)还要检查:注意:最后,作为批量大小传递的数字,例如25,似乎被用作它的一半-12。所以如果你在25的大小上分页,请尝试使用SetBatchSize(50)以上是C#学习教程:NHibernatestandardwithdifferentparentloadallchildren?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: