4

我有一个场景,我需要打开多个指向不同数据库的数据上下文。我只是写入其中一个数据库并从其他数据库中读取......所以从技术上讲,事务应该只针对其中一个数据库。

我想避免将 TransactionScope 升级为分布式事务,因此我不必担心 MSDTC ...有没有办法让事务中只有一个上下文登记?

4

2 回答 2

2

我不确定这是否会将第二个连接纳入事务,但您可以尝试在您的选择中抑制事务范围:

using (new TransactionScope(TransactionScopeOption.Suppress))
{}
于 2010-08-26T13:29:25.273 回答
1

我一直在研究 Linq to Sql 的类似问题——最初我们的解决方案是对每个请求使用相同的连接。Rick Strahl 在这方面发表了一系列博客文章,值得一看。

在我们的解决方案中,DataContext 构造函数有一个重载的构造函数,它从工厂检索连接(如果不存在连接,则传递的连接存储在线程上)

public DataContext1(connection)
    : base (ConnectionFactory.GetConnectionFromContext(connection))
{
}

这在 WCF 场景中似乎工作正常,连接工厂可以存储/从 ServiceModel.OperationContext.Items 集合中检索,并且(更重要的是)订阅 OperationComplete 事件以便在所有操作时关闭/释放线程上的连接完成。

我发现我们还需要扩展连接对象,以便在处理拥有的数据上下文时(例如,在每个操作范围完成后),您可以防止内部连接的自动关闭/处理。

我现在正在研究非 WCF 场景...... TBH 它并不漂亮。我们也没有 WCF 上下文中的“OperationCompleted”事件触发器。

于 2010-09-03T02:07:41.957 回答