Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fluent nhibernate 为什么这个FluentNHibernate查询会加载所有内容?_Fluent Nhibernate - Fatal编程技术网

Fluent nhibernate 为什么这个FluentNHibernate查询会加载所有内容?

Fluent nhibernate 为什么这个FluentNHibernate查询会加载所有内容?,fluent-nhibernate,Fluent Nhibernate,我有以下疑问: MyRepository.Query<MyObject>().SingleOrDefault(x => x.AProperty == aValue); 它返回正确的MyObject,但它开始花费越来越多的时间。当我使用SQL Server Profiler查看时,我看到它通过从数据库中为MyObject和相关对象选择一行和一行来加载数据库中的所有MyObject。当数据库增长时,对于一个非常简单的查询,这将变成成千上万的选择 另一方面,此查询: Session

我有以下疑问:

MyRepository.Query<MyObject>().SingleOrDefault(x => x.AProperty == aValue);
它返回正确的MyObject,但它开始花费越来越多的时间。当我使用SQL Server Profiler查看时,我看到它通过从数据库中为MyObject和相关对象选择一行和一行来加载数据库中的所有MyObject。当数据库增长时,对于一个非常简单的查询,这将变成成千上万的选择

另一方面,此查询:

Session.QueryOver<MyObject>().Where(x => x.AProperty == aValue).SingleOrDefault<MyObject>()
不会加载所有内容,而是创建一个select语句,而不是数千个

为什么??有没有办法告诉查询不要加载所有内容?或者这就是Linq查询的工作方式?我问这个问题的原因是我有一个应用程序,其中所有查询都是使用Query进行的。将其更改为QueryOver需要一些工作。有什么想法吗

一些细节:

查询是NHibernate.Linq命名空间NHibernate v 3.1.0.4000的扩展方法 我的FluentNHibernate版本是1.2.0.712 我有这样的约定:Conventions.AddFluentNHibernate.Conventions.Helpers.DefaultLazy.Never;
经过一天多的研究,我终于意识到了这个问题。这确实很简单,但从问题中的信息很难回答。如果其他人也有同样的经历,这里是正确的答案

MyRepository有这样一个方法

public List<T> Query<T>() where T : DomainEntity
{
    using (var session = _sessionSource.CreateSession())
    {
        using (var transaction = session.BeginTransaction())
        {
            var result = session.Query<T>();
            transaction.Commit();
            return result.ToList();
        }
    }
}
这意味着我首先用session.Query加载所有内容,然后用MyRepository.Query.SingleOrDefaultx=>x.apProperty==aValue查询结果; .

当然,非常糟糕。复制别人的代码并不总是明智的

如何避免呢?只是不要质疑一个问题