在使用实体框架查询数据时,哪个防御检查更可取
本文关键字:检查 实体 框架 查询 数据 | 更新日期: 2023-09-27 18:08:42
在使用实体框架查询数据时,以下哪种防御检查更可取?
1。null
检查:
user = users.SingleOrDefault(u => u.Email.Equals(email));
if(user == null)
{
throw new Exception("Some critical error!");
}
OperationsOnUser(user);
2。LINQ的Any()
:
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);
我个人使用第二个选项,因为它感觉更干净,但我不是执行两个数据库调用而不是一个吗?我不确定实体框架的内部机制
我引用Jon Skeet的话:
我总是建议任何实现类似linq的操作符,只迭代任何输入顺序一次。有些序列是不可能迭代多次,或者每次可能给出不同的结果时间。这是个坏消息。
保持只迭代一次的习惯。
对于你的例子,是的,你访问了两次数据库,这不是一个好主意。
事实上,我觉得你的第二个选择比第一个选择要麻烦得多。你需要重新校准你的混乱检测器!:)
AakashM的评论是正确的。但为了进一步扩展,(1)更好,因为你在数据库上做了一次操作,而在第二个例子中,你做了两次。一次看到它在那里,一次使用它。从我的角度来看,答案是不言而喻的。