我正在使用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; }
答案 0 :(得分:1)
您可以使用Fetch
方法强制join
sql语句填充属性,以获取示例:
return Employees()
.Fetch(x => x.EmployeeDetail)
.Where(e => e.ClientId == clientId && e.Deleted == false)
.ToList();