ARGH !!!SubSonic2.2 SharedDbConnectionScopeとTransactionScopeトランザクションの混乱
SharedDbConnectionScopeとTransactionScopeオブジェクトを取り巻く混乱があり、トランザクション内でSubSonicクエリをラップすることができないようです。
ドキュメントは、ここでは、そのようなSubsonic: Using SharedDbConnectionScope together with TransactionScope seems to be brokenとして
using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
{
using(TransactionScope ts = new TransactionScope())
{
// do something
ts.Complete();
}
}
その後、他の質問は、ドキュメントが間違っていると2つのオブジェクトが他の方法で回避する必要があります示唆...使用のTransactionScopeに巻き付け使用SharedDbConnectionScopeを指定することをお勧め..
using(TransactionScope ts = new TransactionScope())
{
using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
{
// do something
ts.Complete();
}
}
しかし、ソースコードを見ると、私はさらに混乱しています。
SqlQuery.csコードファイルには、多数のExecuteTransactionオーバーロードがあります。たとえば...
public static void ExecuteTransaction(List<SqlQuery> queries)
{
using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
{
using(TransactionScope ts = new TransactionScope())
{
foreach(SqlQuery q in queries)
q.Execute();
}
}
}
うーん興味深い...どこts.Completeは()を呼び出します... がドキュメントにマッチしますが?
どのようにトランザクションをコミットする必要がありますか?私が見る限り、常にロールバックされます。そして、すべてのExecuteTransactionオーバーロードで同じです! TransactionWithDtcOffTests.csコードで
しかし、ここで本当のキッカーはある...
は、他の方法で回避SharedDbConnectionScopeとのTransactionScopeを設定している以外いくつかの素晴らしいテストを持っています!
using(TransactionScope ts = new TransactionScope())
{
using(SharedDbConnectionScope connScope = new SharedDbConnectionScope())
{
// <snip />
}
}
最後に
...は
は、誰かが私を与えることができます..私は亜音速の2.2用のテストを実行する機会がなかったが、私は誰かが持っていると仮定し、彼らが渡されましたSubSonic2.2での取引をどのように設定すべきかについての明確な答え?ドキュメントは本当に間違っていますか? ExecuteTransactionのソースが過負荷になっていて、実際に正しい方法でテストが行われていますか?
私は問題に従うことができません - ここに約3があります。私はあなたがイライラしていることを理解しています:)しかし、あなたがバグだと思っているものと何が混乱しているのかは分かりません。 –
SharedDbConnectionScope(SDCS)とTransactionScope(TS)の順序は混乱しているか、またはバグのビットです。 docs状態SDCSはTSをラップします。しかし、それは動作していないようです。だからバグです。 ExecuteTransactionのオーバーロードでは、SDCSがTSをラッピングするため、バグでもあります。私は実際にコミットされた場所で過負荷がどこにあるのか分からなかったが、バグとは対照的に十分には見えなかったためかもしれない。私が調べたテストコードには、SDCSをラップするTSがありました。だから私はバグではないと結論づけている。 混乱しているビットはエラーの場所です。 – BlackMael
SDCSとTSの順序がエラーであるか、SDCS自体のエラーであり、ドキュメント内の順序が正しいかどうか。 今、TSラッピングを貼っているので、SDCSは私のために働きます。ここで、TSをラッピングするSDCSは、必要な時にはロールバックすることができませんでした。 – BlackMael