Entity framework 4 为什么EntityFramework4.0需要使用DTM?有可能不使用它吗?

Entity framework 4 为什么EntityFramework4.0需要使用DTM?有可能不使用它吗?,entity-framework-4,distributed-transactions,Entity Framework 4,Distributed Transactions,我差不多一年前用过EF。我只是尝试使用TransactionScope处理相当复杂的查询,如下面的代码 using (var tran = new TransactionScope()) { // Clear all data in some table DataContext.SomeTables .ForEach(x => DataContext.SomeTables.DeleteObject(x)); DataContext.SaveChan

我差不多一年前用过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服务

目前的工作数据库是如此之小,我认为它不应该受到不同事务技术的影响


谢谢,

在我搜索了很多网站后,我发现我可以使用实体事务手动创建事务,如以下源代码所示

using (var tran = DataContext.BeginTransaction())
{
    // 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.Commit();
}
助手类

public static DbTransaction BeginTransaction(this ObjectContext context, IsolationLevel isolationLevel = IsolationLevel.ReadCommitted)
{
    if (context.Connection.State != ConnectionState.Open)
    {
        context.Connection.Open();
    }

    return context.Connection.BeginTransaction(isolationLevel);
}
感谢您回答以下问题。我找不到任何其他页面明确建议我使用实体交易,包括主MSDN网站()