NHibernate在查询中为每条记录命中一次数据库

时间:2015-12-08 09:11:43

标签: performance linq nhibernate

我正在使用NHibernate Profiler测量慢速站点上的数据库调用,并立即注意到以下内容导致选择N + 1问题。

我从未使用过NHibernate所以希望有人可以帮助我吗?

 public virtual IQueryable<Employee> Employees()
 {
    return Session.Query<Employee>();
 }

 public IList<Employee> GetEmployeesByClientId(int clientId)
 {
     return Employees()
         .Where(e => e.ClientId == clientId && e.Deleted == false)
         .ToList();
 }

在调用ToList()时,会为EmployeeDetail的每个相关记录运行一个select语句,我不知道为什么。

public virtual EmployeeDetail EmployeeDetail { get; set; }

1 个答案:

答案 0 :(得分:1)

您可以使用Fetch方法强制join sql语句填充属性,以获取示例:

   return Employees()
           .Fetch(x => x.EmployeeDetail)
           .Where(e => e.ClientId == clientId && e.Deleted == false)
           .ToList();