重新编写EF嵌套连接以避免Azure上的MSDTC

时间:2012-12-19 21:13:59

标签: entity-framework transactionscope msdtc

我已经部署到Azure和Azure SQL,它不支持MSDTC,我无法理解如何修改我的代码以防止我假设的是嵌套连接。我对EF很新,而且我对TransactionScope的了解不是很好,所以我不确定我是否有正确的模式。

我正在尝试使用repos,它调用ObjectContext的共享实例(我试图在EndRequest上处理但是有问题,所以这对我来说是另一个问题)。

我有一个在ObjectContext实例上多次调用SaveChanges的事务,但在某些时候它会被处理掉。什么是管理这个,你能推荐我能做些什么来使它正常工作吗?

1 个答案:

答案 0 :(得分:3)

如果要避免分布式事务的问题,则必须手动处理连接,因为每个TransactionScope =一个上下文实例只需要一个打开的连接,其中一个连接用于所有查询和数据库更新。代码应如下所示:

using (var context = new YourObjectContext()) {
    context.Connection.Open();

    ...
}
  

我正在尝试使用repos,它调用了共享的实例   ObjectContext(我试图在EndRequest上处理但是有问题,所以   这对我来说是另一个问题。)

如果您在多个请求中共享您的上下文实例,或者更糟糕的是,如果您仅使用单个上下文实例来处理所有请求,则应立即停止并完全重新设计应用程序。 Otherwise it will not work correctly.