首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate集合抓取策略

NHibernate集合抓取策略
EN

Stack Overflow用户
提问于 2018-09-19 21:07:18
回答 1查看 170关注 0票数 0

我在fluent api中使用NHibernate,得到的MainEntity映射如下:

代码语言:javascript
复制
mapping.References(c => c.Parent1).Not.Nullable().Fetch.Select();
mapping.HasMany(c => c.Children1).Fetch.Select();
mapping.HasMany(c => c.Children2).Fetch.Select();

然后,我尝试像这样查询MainEntity:

代码语言:javascript
复制
var query = Session.Query<MainEntity>().Where(e => e.ID == id);
query.Fetch(e => e.Parent1).ToFuture();
query.FetchMany(e => e.Children1).ToFuture();
query.FetchMany(e => e.Children2).ThenFetch(c => c.Children21).ToFuture();
var entity = query.ToFuture().FirstOrDefault();

并得到这样的sql查询:

代码语言:javascript
复制
select * from MainEntity
left outer join Parent1 on MainEntity.Parent1ID = Parent1.ID
where MainEntity.ID = @id;

select * from MainEntity
left outer join Children1 on MainEntity.ID = Children1.MainEntityID 
where MainEntity.ID = @id;

select * from MainEntity
left outer join Children2 on MainEntity.ID = Children2.MainEntityID
left outer join Children21 on Children2.Children21ID = Children21.ID
where MainEntity.ID = @id;

select * from MainEntity
where MainEntity.ID = @id;

但我希望NHibernate首先选择MainEntity,然后按条件选择Parent1Children1Children2

代码语言:javascript
复制
select *
from Parent1
where ID = @parent1ID;

select *
from Children1
where MainEntityID = @id;

@parent1ID@id是通过MainEntities的第一次查询选择的。

请帮助我配置映射以执行此操作。

EN

回答 1

Stack Overflow用户

发布于 2018-09-28 03:29:07

你有没有尝试过其他LINQ版本?它应该看起来像这样:

代码语言:javascript
复制
Query<Parent>()
.FetchMany(x=>x.Children1)
.FetchMany(x=>x.Children)
.FirstOrDefault(x=>x.Id=param1);

并将子项映射更改为

代码语言:javascript
复制
mapping.HasMany(c => c.Children1);
mapping.HasMany(c => c.Children2);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52406609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档