首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用实体框架查询数据时,哪种防御检查更可取?

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

Stack Overflow用户
提问于 2013-04-12 09:30:03
回答 2查看 57关注 0票数 0

在使用实体框架查询数据时,以下哪一种防御检查更可取?

1. null 检查:

代码语言:javascript
复制
user = users.SingleOrDefault(u => u.Email.Equals(email));

if(user == null)
{
    throw new Exception("Some critical error!");
}

OperationsOnUser(user);

LINQ的Any()**:** 2.

代码语言:javascript
复制
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);

就我个人而言,我使用第二个选项,因为我觉得它更干净,但我不是在执行两个数据库调用,而不是一个吗?我不确定实体框架的内部机制。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-12 09:37:39

我将引用乔恩·斯基特的话:

我总是建议任何实现LINQ类运算符的人只对任何输入序列迭代一次。有些序列是不可能多次迭代的,或者每次都会给出不同的结果。这是个坏消息。

保持习惯只重复一次。

对于您的例子,是的,您正在访问两倍的数据库,这不是一个好主意。

事实上,我觉得你的第二个选择比第一个选择要混乱得多。你需要重新校准你的脏探测器!:)

票数 2
EN

Stack Overflow用户

发布于 2013-04-12 09:34:52

AakashM的评论是正确的。但是,要扩展这一点,(1)更好,因为您正在对数据库执行一个操作,而在第二个示例中,您要执行两次操作。一次看到它在那里,一次去使用它。我认为答案在我看来是不言而喻的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15967716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档