我正在使用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/
有任何线索吗?
答案 0 :(得分:2)
通过调用.FirstOrDefault()
,您可以指示NHibernate构建一个TOP 1查询。