在使用实体框架查询数据时,以下哪一种防御检查更可取?
1. null 检查:
user = users.SingleOrDefault(u => u.Email.Equals(email));
if(user == null)
{
throw new Exception("Some critical error!");
}
OperationsOnUser(user);LINQ的Any()**:** 2.
if(users.Any(u => u.Email.Equals(email)))
{
user = users.Single(u => u.Email.Equals(email));
}
else
{
throw new Exception("Some critical error!");
}
OperationsOnUser(user);就我个人而言,我使用第二个选项,因为我觉得它更干净,但我不是在执行两个数据库调用,而不是一个吗?我不确定实体框架的内部机制。
发布于 2013-04-12 09:37:39
我将引用乔恩·斯基特的话:
我总是建议任何实现LINQ类运算符的人只对任何输入序列迭代一次。有些序列是不可能多次迭代的,或者每次都会给出不同的结果。这是个坏消息。
保持习惯只重复一次。
对于您的例子,是的,您正在访问两倍的数据库,这不是一个好主意。
事实上,我觉得你的第二个选择比第一个选择要混乱得多。你需要重新校准你的脏探测器!:)
发布于 2013-04-12 09:34:52
AakashM的评论是正确的。但是,要扩展这一点,(1)更好,因为您正在对数据库执行一个操作,而在第二个示例中,您要执行两次操作。一次看到它在那里,一次去使用它。我认为答案在我看来是不言而喻的。
https://stackoverflow.com/questions/15967716
复制相似问题