gpt4 book ai didi

c# - 通过代码映射优化 Nhibernate 查询

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:59 25 4
gpt4 key购买 nike

我有一个 nhibernate 3.2 查询,它返回前 500 个干预项(在原始查询中有一个过滤器)

var (from interv in Session.Query<Intervention>()
.Fetch(rep => rep.ReponsePointVerification)
orderby interv.DateModification
select interv)
.Take(500)
.ToList();

然后我迭代所有值并使用 ReponsePointVerification 值。

// a (very) simplified example
foreach (var intervention in listeInterventions)
{
foreach (var reponse in intervention.ReponsePointVerification)
{

}

listeInterventionsws.Add(interventionws);
}

此查询已优化,但效果不佳,因为 Take 方法将占用 500 行,如果有 ReponsePointVerification 值,我将不会有 500 个干预项。

所以如果我想让它工作,我有两种方法:

  • 删除 Take(500) 并仅采取前 500 次干预(当数据库增长时很重)
  • 删除抓取,但如果我有 500 + 1 个查询。

nhibernate 是否有处理这种情况的方法?

问候

编辑

谢谢 Diego,它成功了。

我忘了说我在 nh 3.2 中使用了代码映射

通过代码映射的批量大小可以这样配置:

Bag(x => x.ReponsePointVerification, map =>
{
map.Key( k => k.Column( "IdIntervention" ) );
map.BatchSize(50);
}, rm => rm.OneToMany());

比照。 http://puredotnetcoder.blogspot.com/2011/07/mapping-conventions-with-mapping-by.html

最佳答案

在受影响集合的映射上使用 batch-size 而不是 Fetch

在 90% 的情况下,这是一个更好的解决方案。

(我打算链接到相关文档部分,但该网站目前已关闭)

关于c# - 通过代码映射优化 Nhibernate 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9055520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com