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