2014-02-15 70 views
0

我使用的是nHibernate,它工作正常。
但是我开始用miniprofiler分析它,发现其中有很多重复的请求。nHibernate在分析时查询重复查询结果(select top 1)

例如该日志消息:

select TOP (1) user0_.Id as Id26_ 
       , user0_.Username as Username26_ 
       , user0_.Password as Password26_ 
       , user0_.IsSystemAdmin as IsSystem4_26_ 
       , user0_.LastLogin as LastLogin26_ 
       , user0_.Name as Name26_ 
       , user0_.Email as Email26_ 
       , user0_.PhoneNumber as PhoneNum8_26_ 
from [User] user0_ 
where user0_.Username = @p0 

(的ExecuteReader的getResultSet DoQuery DoQueryAndInitializeNonLazyCollections DoList ListIgnoreQueryCache 列表列表列表PerformList)

但查询其实是不顶1查询。 表中的每一行都有这些请求中的一个,但它应该在数据库查询中进行评估!

_userRepository.FindAllQuery(x => x.Username == username).FirstOrDefault(); 

public IQueryable<TEntity> FindAllQuery(Expression<Func<TEntity, bool>> expression) 
{ 
    return Session.Query<TEntity>().Where(expression); 
} 

这可能是相关型号,但我不知道:
http://charlass.wordpress.com/2012/03/11/nhibernate-firstordefault-and-fetch-not-what-i-expect/

对此有何玄机?

回答

2

通过调用.FirstOrDefault()指示NHibernate构造TOP 1查询。