【发布时间】:2010-11-02 10:41:00
【问题描述】:
我大约一年前使用 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。当前工作的数据库是如此之小,我认为它不应该受到不同事务技术的影响。
谢谢,
【问题讨论】:
标签: entity-framework-4 distributed-transactions