Entity framework 4 如何在实体框架中配置事务?

Entity framework 4 如何在实体框架中配置事务?,entity-framework-4,entity-framework-4.1,Entity Framework 4,Entity Framework 4.1,如何在实体框架4中配置事务?在普通的旧Ado.Net中,我们有一个名为SqlTransaction的类,我们还可以为该事务指定隔离级别,如Read_Committed、Read_UnCommitted等。我在Entity Framework中找不到所有这些选项。如何配置它们?您可以使用该类,并使用如下所述设置隔离级别: TransactionScope的一些重载构造函数接受TransactionOptions类型的结构,以指定除超时值之外的隔离级别。默认情况下,事务在隔离级别设置为Seriali

如何在实体框架4中配置事务?在普通的旧Ado.Net中,我们有一个名为SqlTransaction的类,我们还可以为该事务指定隔离级别,如Read_Committed、Read_UnCommitted等。我在Entity Framework中找不到所有这些选项。如何配置它们?

您可以使用该类,并使用如下所述设置隔离级别:

TransactionScope的一些重载构造函数接受TransactionOptions类型的结构,以指定除超时值之外的隔离级别。默认情况下,事务在隔离级别设置为Serializable的情况下执行。对于读密集型系统,通常会选择可序列化之外的隔离级别。这需要对事务处理理论和事务本身的语义、涉及的并发问题以及对系统一致性的影响有坚实的理解

例如:

using (var context = new EFTestEntities())
{
    context.AddToProducts(new Product { Name = "Widget" });
    context.AddToProducts(new Product { Name = "Chotchky" });

    TransactionOptions options = new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted, Timeout = TransactionManager.DefaultTimeout };

    using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew, options))
    {
        // do any EF work that you want to be performed in the transaction
        context.SaveChanges();

        // commit the transaction
        scope.Complete(); 
    }
}