私はほぼ1年前にEFを使用しています。次のコードのような非常に複雑なクエリでTransactionScope取引を使用しようとしています。
using (var tran = new TransactionScope())
{
// Clear all data in some table
DataContext.SomeTables
.ForEach(x => DataContext.SomeTables.DeleteObject(x));
DataContext.SaveChanges();
// Import data from excel as DataSet object.
var ds = ImportDataFromExcel(file.FullName);
foreach (DataRow dr in ds.Tables[0].Rows)
{
DataContext.SomeTables.AddObject(new SomeTable
{
// fill object with data from current row.
});
}
DataContext.SaveChanges();
// Commit Transaction
tran.Complete();
}
その後、DTM が有効になっていない、またはアクセスできないというエラーが表示されました。データベースサーバーのこのサービスが開始されていないか、ファイアウォールによってブロックされていることが原因であることはわかっています。しかし、それは私の主張ではありません。
EF がこのサービスを使用してトランザクションを作成する理由を知りたいのですが、プレーン SQL スクリプトは「BEGIN TRAN」、「SAVE TRAN」、「ROLLBACK TRAN」などのステートメントしか使用できません。
非常に単純なトランザクション ステートメントに対して DTM サービスを呼び出さないようにする他の方法はありますか?
PS。現在の作業データベースは非常に小さいので、異なるトランザクション技術の影響を受けるべきではないと思います。
ありがとう、