分析时nHibernate查询结果重复查询(选择前1)

时间:2014-02-15 11:31:15

标签: c# performance linq sql-server-2008 nhibernate

我正在使用nHibernate,它工作正常。
但是我开始使用miniprofiler对其进行分析,发现那里存在很多重复请求。

例如此日志消息:

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)

但查询实际上不是Top 1查询。 表中的每一行都有一个请求,但它应该在db查询中进行评估!

_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/

有任何线索吗?

1 个答案:

答案 0 :(得分:2)

通过调用.FirstOrDefault(),您可以指示NHibernate构建一个TOP 1查询。