Я пользуюсь 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. Текущая рабочая база данных настолько мала, и я думаю, что это не должно зависеть от другой техники транзакций.
Спасибо