【发布时间】:2012-03-16 10:49:26
【问题描述】:
我正在使用 NHibernate 和 LINQ 的组合来尝试实现查询,但我担心以下查询会从数据库中拉回每个用户行,从而导致数据库延迟大、网络流量大、内存大足迹,然后过滤掉它太晚了。
public bool CheckEmailAddressIsAvailable
(string emailAddress, IDataRepository repository)
{
var users = from user in repository.GetItems<User>()
where user.EmailAddress.Equals(
emailAddress,
System.StringComparison.CurrentCultureIgnoreCase)
select user;
return !(users.Any());
}
DataRepository 是 NHibernate Session 的简单包装器 我想知道的是双重的
1) 我如何记录所有正在创建的 NHibernate SQL,以便我可以密切关注正在运行的内容 和 2)我怎样才能运行上面的查询来模仿下面的SQL
select count(*) from [User] where EmailAddress = @emailAddress
【问题讨论】:
-
我不使用 NHibernate,但您可以使用 SQL Profiler 查看您的应用程序正在运行的查询。如果您认为没有实现任何功能,我也会尝试使用 .Count != 0 而不是 .Any()
-
1) [如何启用 sql 日志记录][1] [1]: stackoverflow.com/q/474659/671619
-
另外,您使用的 NHibernate 版本很重要,因为带有 contrib Nhibernate.Linq 的 v2.1 很糟糕 :(
标签: c# linq nhibernate