EnterpriseLibrary と Unity を使用する 1 つのアプリがあり、TransactionScope を 1 か所で使用します。これは、SQL Server 2005 に対して実行されるという事実にもかかわらず、うまく機能します。
// Execute a stored proc using a DbDatabase object inserted by Unity
using(TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
// Update something using the same DbDatabase object
// Run the stored proc above, again
// Assert that the results are different than from the previous call.
}
はい、これは故意に なしで終了しますscope.Complete()
: 例はテストからのものです。
また、開始したばかりの別のアプリケーションもあります。Entity Framework 4.1 を使用しています。同じサーバー上の同じデータベースにアクセスします。TransactionScope
同じ「変更を加え、変更を検証し、変更をロールバックする」という考えを念頭に置いて、を使用しようとしました。
using(TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
using(ProjectEntities db = new ProjectEntities())
{
Assert.IsFalse(db.tblEntities.Any(e=>e.X == desired_value));
db.tblEntities.Add(new tblEntity() { X = desired_value });
db.SaveChanges();
Assert.IsTrue(db.tblEntities.Any(e=> e.X == desired_value));
}
}
これは、MSDTC がネットワーク アクセスに対して有効になっていないというよく知られたエラーで失敗します。
今、この瞬間、最初のプロジェクトの最初のテストは成功し、2 番目のテストは失敗しました。
だから私は2つの質問があります:
トランザクションが MSDTC にエスカレートしないように、2 番目のテストを再調整する方法はありますか?
2つのフレームワークから異なる結果が得られる理由を知っている人はいますか? EntLib は、使用中ずっと単一の接続を割り当てて開いたままにしますか? EF は反対のことをしますか?