c# - 使用 context.SaveChanges() == 0 测试操作是否成功

标签 c# asp.net-mvc-3 entity-framework exception entity-framework-5

我有一个 ASP.NET MVC3 项目,它使用 EF5 db-first 进行数据访问;我的前任建立的模式是引入以下更新/删除操作检查:

if (context.SaveChanges() == 0)
    throw new SqlExecutionException("...");

我最近意识到,当使用未更改的数据更新现有数据时,这种方法会失败,例如当用户打开一个窗口来编辑内容并按“确定”而不实际更改任何内容时;那么更改的记录数为 0,抛出异常,这是错误的。

环顾四周,我发现这个检查的目的是错误的:如果记录在从数据库中提取后被破坏,EF 将抛出 DataException 的子类型来表示这一点,我无法想到存在此检查的任何其他原因。我的前任已经脱离了现实,因此我的问题是:我可以安全地从代码中清除这些检查,并在更高级别上使用 DataException 过滤器来补充它们吗?

最佳答案

是的,这是 C++ 时代的模式。如果存在数据库约束违规,EF 或其他 ORM 会给您良好的错误消息。

关于c# - 使用 context.SaveChanges() == 0 测试操作是否成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20701271/

相关文章:

c# - 如何为 EF 中的 POCO 实体添加 C# 自动计算?

entity-framework - 代码优先 EF6 SqlServerMigrationSqlGenerator 中的自定义逻辑不起作用

c# - 有没有使用 OAuth2 访问 Quickbooks API 的简单方法?

c# - 使用相同端点/ Controller 的多个实体类型

c# - 获取转义的多语法 sql 更新字符串

c# - 在 EF4.1 代码中,如何覆盖 Web.config 中的 ConnectionString 名称

asp.net-mvc-3 - Azure 和 HttpHandler

javascript - MVC 两个列表框双击时从第一个添加到第二个

c# - 从 ".m3u8"URL 的视频中提取音频

linq - EF 返回聚合和非聚合数据