【发布时间】:2021-12-15 03:04:11
【问题描述】:
关于 SaveChangesAsync 方法,微软说 这是一个代表异步保存操作的任务。任务结果包含写入底层数据库的状态条目数。
据此,一些程序员使用 if 条件来检查 SaveChangesAsync 运行后受影响的行数。
这里是一个例子:How can I confirm if an async EF6 await db.SaveChangesAsync() worked as expected?
但是,如果调用 SaveChangesAsync 时发生错误会怎样?好吧,与我的预期相反,即“0 行受影响”,抛出异常,在大多数情况下,DbUpdateException
“当保存对数据库的更改失败时,DbContext 引发的异常。”
那么,一旦数据库的结果永远不会为零,为什么会有几个使用if (await context.SaveChangesAsync() > 0) 的建议,而是一个例外?
【问题讨论】:
-
如果没有任何变化,它可能为 0,但也可能引发异常。这可能是由于并发、不匹配的架构、不符合约束的数据、检查约束错误、违反引用完整性等。这只是适当的设计,异常或内部异常通常足够详细,可以让您知道原因它失败了。
-
尝试使用 try/catch 块捕获异常并读取内部异常。唯一/主键违规、Fk 违规等...
-
具体看内部异常是不是真的报错
标签: c# .net .net-core entity-framework-core