entity-framework - 使用 OData 进行事务性批处理

标签 entity-framework asp.net-web-api odata

使用 Web API OData,我有 $batch 处理工作,但是,对数据库的持久性不是事务性的。如果我在请求中的变更集中包含多个请求,并且其中一个失败,另一个仍然完成,因为对 Controller 的每个单独调用都有自己的 DbContext。

例如,如果我提交一个包含两个更改集的 Batch:

第 1 批
- 变更集 1
- - 修补有效对象
-- 修补无效对象
- 结束变更集 1
- 变更集 2
- - 插入有效对象
- 结束变更集 2
结束批次

我希望第一个有效补丁会被回滚,因为更改集无法完全完成,但是,由于每个调用都有自己的 DbContext,第一个补丁被提交,第二个不是,插入是坚定的。

是否有标准方法通过 OData 的 $batch 请求来支持事务?

最佳答案

以下链接显示了处理事务中的变更集所需的 Web API OData 实现。您是正确的,默认批处理处理程序不会为您执行此操作:

http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v3/ODataEFBatchSample/

更新
原始链接似乎已经消失 - 以下链接包含用于事务处理的类似逻辑(以及 v4):

https://damienbod.com/2014/08/14/web-api-odata-v4-batching-part-10/

关于entity-framework - 使用 OData 进行事务性批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21373362/

相关文章:

c# - 运行 SqlQuery EF 时 FieldNameLookup.GetOrdinal 中的索引超出范围异常

grails - 如何使用OData公开Grails域模型?

.net - 来自 OData 源的多对多查询

web-services - ODATA - Int64 类型的查询字段

node.js - 使用 SendGrid 发送的电子邮件内容中的随机空格

amazon-web-services - Windows docker上的AWS CLI

c# - 使用 ASP.NET 清除缓存的最有效方法

c# - ADO.NET Entity Framework : Converting String to Int in Where/OrderBY

wpf - 分层代码优先 EF 绑定(bind)到 WPF Treeview ......不可能

c# - 基于查询字符串参数名的路由