,共享事務我想不同的調用共享相同的事務。最初的想法是保持一個靜態指向活動事務,但這不是線程保存,並且由於我正在編寫一個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
是壞的,但這是非線程環境的最初想法。
是否有一個地方共享交易實際上是有用的,你可以跟我們分享的情景? – 2012-01-12 10:29:57
在我的示例中,事務在調用者「other1」和「other2」之間共享。 – 2012-01-12 10:33:28
你提到WCF,而且作爲InstanceContextMode你使用不提供任何指示,或者是否/如何你使用WCF的TransasctionScopeOption屬性。 WCF應該能夠爲你做很多這種管道工作。 – 2012-01-12 12:51:58