Sql 2000 データベースに対する Linq-to-Sql アクションの単純なトランザクションを設定しようとしています。TransactionScope を使用すると、次のようになります。
using (TransactionScope transaction = new TransactionScope())
{
try
{
Store.DBDataContext dc = new Store.DBDataContext();
Store.Product product = GetProduct("foo");
dc.InsertOnSubmit(product);
dc.SubmitChanges();
transaction.Complete();
}
catch (Exception ex)
{
throw ex;
}
}
ただし、次のエラーが発生し続けます。
パートナー トランザクション マネージャーは、リモート/ネットワーク トランザクションのサポートを無効にしました。(HRESULT からの例外: 0x8004D025)
しかし、従来のトランザクションを使用してトランザクションをセットアップすると、問題なく動作します。したがって、これは正常に機能します:
Store.DBDataContext dc = new Store.DBDataContext();
try
{
dc.Connection.Open();
dc.Transaction = dc.Connection.BeginTransaction();
Store.Product product = GetProduct("foo");
dc.InsertOnSubmit(product);
dc.SubmitChanges();
dc.Transaction.Commit();
}
catch (Exception ex)
{
dc.Transaction.Rollback();
throw ex;
}
finally
{
dc.Connection.Close();
dc.Transaction = null;
}
TransactionScope が、私の 2 番目の実装とは裏で何か違うことをしているのだろうかと思っています。そうでない場合、TransactionScope を使用しないと何が失われますか? また、エラーの原因に関するガイダンスも役立ちます。MSDTC が SQL サーバーとクライアント マシンの両方で実行されていることを確認しました。