wcf - 如何让 Entity Framework 和 WCF 与事务一起工作?好吧……有什么 secret ?

标签 wcf oracle entity-framework transactions

我一直在尝试几种不同的方法,以便让一组简单的事务处理简单的 WCF 客户端/服务器情况。我的 WCF 服务器有一个 Entity Framework 类的类级别声明,用于我的数据库访问和几个修改数据的方法和一个 SaveChanges 方法。我正在使用 Oracle 数据访问 (ODP.NET)。

例如,我想从客户端调用修改,然后单独调用以保存 WCF 服务中的更改。它不起作用。基本上,一切都执行得很好,但是当第二次调用保存更改时,WCF 服务不再具有原始上下文,因此不会保存任何更改(因此,之前进行更改的调用会自动回滚) .

我在客户端中的两个操作周围都使用事务范围,并在完成后执行 Complete()。我的 WCF 服务有使用 [TransactionFlow(TransactionFlowOption.Mandatory)] 的 OperationContract's并且那些方法实现使用 [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)] .最后,我的 web 配置配置了一个 wsHttpBinding,它具有 transactionFlow属性设置为 True。

我没有运气。无论我尝试什么,当我尝试点击服务进行后续保存时,EF 上下文已经更新。

最佳答案

这与交易无关。事务处理事务资源但不调用 SaveChanges在第一个请求中,没有事务资源处于事件状态,因为 EF 上下文不是事务的一部分 - 只有在您调用 SaveChanges 时才会影响数据库和数据库。 .要完成这项工作,您不需要分布式事务。您需要 session 完整服务并将 EF 上下文存储在服务实例中。如果客户端使用相同的客户端代理实例与所有请求的服务通信,则通信将由相同的服务实例处理 = 相同的 EF 上下文实例,它将记住先前调用的更改。

恕我直言,这是非常糟糕的架构。简单地不要使用它。在 WCF 服务上公开专门的方法,这些方法将进行更改并保存它们。如果您需要在与其他事务资源的事务中执行这些方法,请使用真正的分布式事务。

关于wcf - 如何让 Entity Framework 和 WCF 与事务一起工作?好吧……有什么 secret ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8219026/

相关文章:

c# - 为什么 wcf 不允许没有 http 模块,通过传输安全模式进行用户名/密码身份验证

c# - 将 blob 和容器列出到列表框 C#

java - jpa @SequenceGenerator.allocationSize 是什么意思?

entity-framework - 从NuGet获取EF 6以在F#项目上安装

c# - 如何将自定义方法添加到 Entity Framework 中的自动生成类?

wcf - 如何使用 WCF/Rest Web 服务更新 sharepoint 中的多选字段?

c# - 有没有办法在 Visual Studio 2012 中查看更新服务引用操作的错误日志

oracle - 如何提高基于 SCN 的查询性能?

java - 使用 SqlResultSetMapping 和 ConstructorResult 的类转换异常

entity-framework - Entity Framework 6 ToString()、格式化(DateTime 格式)、查询拦截