在使用实体框架查询数据时,哪个防御检查更可取

本文关键字:检查 实体 框架 查询 数据 | 更新日期: 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)更好,因为你在数据库上做了一次操作,而在第二个例子中,你做了两次。一次看到它在那里,一次使用它。从我的角度来看,答案是不言而喻的。