【发布时间】:2013-03-08 16:11:40
【问题描述】:
在official guidance for using OData in ASP.NET Web API 中,修改数据库的示例似乎都包含竞争条件。例如,示例UpdateEntity 方法调用_context.Products.Any 后跟_context.SaveChanges,但数据库可能在两次调用之间发生了变化。
这不同于 Visual Studio 为带有实体框架控制器的新 Web API 生成的样板代码,其中包含 DbUpdateConcurrencyException 的捕获块。是否有类似的模式是 OData 更新方法的最佳实践?
此外,调用Any 后跟SaveChanges 涉及两次数据库往返。是否有只制作一个的最佳做法?
【问题讨论】:
-
调用 Any 后跟 SaveChanges 不会消除竞争条件,它只会降低覆盖数据的风险。我认为您需要的是使用并发令牌。当您尝试保存实体但数据库中的数据已更改时,EF 将抛出。查看这篇 msdn 文章以了解更多详细信息 msdn.microsoft.com/en-us/library/vstudio/…。如果您使用 DbContext,事情的工作方式类似
标签: asp.net entity-framework asp.net-web-api odata