当我使用这种模式时,我希望 100% 做到这一点
using (var scope = new TransactionScope())
{
db1.Foo.InsertOnSubmit(new Foo()); // just an example
db1.SubmitChanges();
scope.Commit();
}
事务范围将仅引用 db1 而不是 db2(db1 和 db2 是 DataBaseContext 对象)。那么如何将范围限制为仅 db1 呢?
提前谢谢您。
最佳答案
TransactionScope
的优势在于它会自动捕获其中的所有内容,直至调用堆栈(除非另一个 TransactionScope
具有 RequiresNew
或 抑制
)。如果这不是您想要的,您应该使用另一种机制进行事务处理。
一种方法是打开 SqlConnection
并调用 BeginTransaction
来获取事务,然后在创建数据上下文时使用该数据库连接。 (也许您必须在数据上下文上设置 Transaction 属性,我不确定)。
在上面给出的示例中,使用 TransactionScope
是完全多余的。只有一个函数调用实际修改数据库:SubmitChanges
,并且如果尚不存在事务,它总是创建自己的事务。原因是,当您执行多个操作时,SubmitChanges
要么全部成功,要么全部失败。如果您只追求单个数据上下文的单个 SubmitChanges
调用的事务完整性,那么您可以删除 TransactionScope
。
关于c# - 如何在 C# 中将 TranscactionScope 限制为给定的 DataBaseContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5510766/