.net 正在抑制只读EF上下文的TransactionScope登记?

.net 正在抑制只读EF上下文的TransactionScope登记?,.net,entity-framework,datacontext,transactionscope,msdtc,.net,Entity Framework,Datacontext,Transactionscope,Msdtc,我有一个场景,需要打开指向不同数据库的多个DataContext。不过我只给其中一个数据库写信,从其他数据库中阅读。。。因此,从技术上讲,事务应该只针对其中一个数据库 我希望避免将TransactionScope升级为分布式事务,这样我就不必担心MSDTC。。。有没有办法在事务中只登记一个上下文?我不确定这是否会将第二个连接登记到事务中,但您可以尝试在您的选择上取消transactionscope: using (new TransactionScope(TransactionScopeOpti

我有一个场景,需要打开指向不同数据库的多个DataContext。不过我只给其中一个数据库写信,从其他数据库中阅读。。。因此,从技术上讲,事务应该只针对其中一个数据库


我希望避免将TransactionScope升级为分布式事务,这样我就不必担心MSDTC。。。有没有办法在事务中只登记一个上下文?

我不确定这是否会将第二个连接登记到事务中,但您可以尝试在您的选择上取消transactionscope:

using (new TransactionScope(TransactionScopeOption.Suppress))
{}

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

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

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

我发现我们还需要扩展connection对象,这样当拥有的datacontext被释放时(例如,在每个操作范围完成之后),您就可以防止内部连接的自动关闭/diposal


我现在正在看非WCF场景。。。太不漂亮了。我们也没有WCF上下文中的“OperationCompleted”事件触发器。

我感觉这个方法可能会失败,因为DataContext在进入没有环境事务的范围并提交更改时,很可能会关闭其关联的连接对象。但这只适用于单个数据上下文。。。在一个datacontext上支持transactionscope操作,而在另一个datacontext上允许它们应该是可以的。
public DataContext1(connection)
    : base (ConnectionFactory.GetConnectionFromContext(connection))
{
}