我有一个WCF服务,它使用System.Data.Services.DataService公开数据库,并使用System.Data.Services.Client.DataServiceContext使用生成的客户端代理来使用此服务。
我需要做的是在客户端对DataServiceContext进行多次添加/更改,但将这些更改作为单个事务执行。
我想到了实现这一目标的以下可能性,但我不确定这些是否正确:
- 延迟调用SaveChanges(),直到完成所有必需的添加/修改并成功。如果任何操作失败,以某种方式撤消到目前为止所做的所有更改,以便下次调用SaveChanges()时,不会将任何修改发送到服务器。 (我不确定在调用SaveChanges()之前,即使在客户端一切都成功,如果服务器端出现问题,服务器会将单个SaveChanges()调用视为事务,因为它实际上发送了一个单独的POST请求每次修改)
- 使用批量更新(我不确定服务器是否可以或将在单个批量更新请求中处理多个操作作为单个事务)
- 以某种方式使用TransactionScope(仍然不确定如果这样做我可以在每次更新后调用SaveChanges()并且整个操作集将被视为单个事务,因为它们都在TransactionScope的范围内或者如果完成后我只需要调用一次SaveChanges(),这与1的情况基本相同,但增加了TransactionScope)
醇>
我已经看到了与此here和here类似的其他问题。第二个问题似乎暗示,由于RESTful服务的性质,这在概念上是不可能的,但我想知道在技术上是否仍然可以专门使用WCF。