我有以下查询:为什么这个FluentNHibernate查询加载所有内容?
MyRepository.Query<MyObject>().SingleOrDefault(x => x.AProperty == aValue);
它返回正确的MyObject的,但它已经开始采取越来越多的时间。当我用SQL Server Profiler查看时,通过从数据库中为MyObject和相关对象选择一行和一行,我发现它将数据库中的MyObjects加载全部。当数据库增长时,这变成了成千上万的选择用于相当简单的查询。
在另一方面,这个查询:
Session.QueryOver<MyObject>().Where(x => x.AProperty == aValue).SingleOrDefault<MyObject>()
不加载的一切(它创建一个SELECT语句,而不是千人)。
为什么?有没有办法告诉查询不加载所有内容?或者这只是Linq查询的工作方式?我问的原因是我有一个应用程序,所有查询都使用查询。将需要一些工作将其更改为QueryOver。有任何想法吗?
一些细节:
- 查询从NHibernate.Linq命名空间的扩展方法(NHibernate的v 3.1.0.4000)
- 我FluentNHibernate的版本为1.2.0.712
- 我有这个约定:Conventions.Add(FluentNHibernate.Conventions.Helpers.DefaultLazy.Never());
我很尴尬...... :) – Halvard