【发布时间】:2012-01-12 10:07:41
【问题描述】:
我希望不同的调用共享同一个 SQL 事务。最初的想法是保留一个指向活动事务的静态指针,但这不是线程保存,因为我正在编写 WCF 服务,所以我应该考虑这些事情。我想要的不是“静态”,而是当前上下文的静态内容。
// The main idea
public override void SaveItem()
{
using (var transaction = BeginSharedTransaction())
{
other1.Save();
base.SaveItem();
other2.Save();
transaction.Commit();
}
}
// In the base class
public void Save() { ... SaveItem(); ... }
protected virtual void SaveItem() { ... }
// In the base class (or another helper class)
static SqlTransaction _sqlTran = null;
public static SqlTransaction BeginSharedTransaction()
{
_sqlTran = ... // conn.BeginTransaction();
return _sqlTran;
}
如果可能,我更喜欢不涉及TransactionScope 的解决方案。
编辑 - 我想我们都同意static SqlTransaction 在服务中不好,但这是非线程环境的最初想法。
【问题讨论】:
-
您是否可以与我们分享一个实际有用的场景?
-
在我的示例中,事务在调用者“other1”和“other2”之间共享。
-
您提到了 WCF,但没有说明您正在使用的 InstanceContextMode,或者您是否/如何使用 WCF 的 TransasctionScopeOption 属性。 WCF 应该能够为您做很多这样的工作。
-
特伦斯,我不知道,我在哪里可以找到那些东西?
-
Terence,如果您能给我一些建议或链接,我将不胜感激。
标签: c# wcf transactions