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

C# 通过代码映射优化Nhibernate查询,c#,nhibernate,C#,Nhibernate,我有一个nhibernate 3.2查询,它返回前500个干预项(在原始查询中有一个过滤器) 此查询已优化,但效果不好,因为Take方法将占用500行,如果存在ReponsePointVerification值,则我将不会有500个干预项 因此,如果我想让它发挥作用,我有两种方法: 删除Take(500)并只执行前500次干预(数据库增长时会很重) 删除提取,但如果我将有500+1查询 nhibernate是否有处理该案件的方法 问候 编辑 谢谢你,迭戈,成功了 我忘了提到我在NH3.2中使

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

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

因此,如果我想让它发挥作用,我有两种方法:

  • 删除Take(500)并只执行前500次干预(数据库增长时会很重)
  • 删除提取,但如果我将有500+1查询
nhibernate是否有处理该案件的方法

问候

编辑

谢谢你,迭戈,成功了

我忘了提到我在NH3.2中使用了代码映射

通过代码映射的批次大小可以如下配置:

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

请参阅在受影响集合的映射上使用
批量大小
,而不是
获取

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

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

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

    }

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