SetTransactionHandler for ObjectContext

本文关键字:ObjectContext for SetTransactionHandler | 更新日期: 2023-09-27 18:10:01

如何设置ObjectContext的TransactionHandler ?

我正在检查这个例子:事务提交失败的处理,但它只显示为DbContext.

SetTransactionHandler for ObjectContext

TransactionHandler也适用于ObjectContext。唯一的问题是,在第一个DbContext实例化之前,不会对基于代码的配置(DbConfiguration)进行评估。

两种可能的解决方法

假DbContext:

public class MyDbConfiguration : DbConfiguration
{
    public MyDbConfiguration()
    {
        SetTransactionHandler(SqlProviderServices.ProviderInvariantName, 
            () => new CommitFailureHandler());
    }
}
public class TestContext : DbContext { }
static void Main(string[] args)
{
    // instantiate DbContext to initialize code based configuration
    using (var db = new TestContext()) { }
    using (var db = new TransactionHandlerDemoEntities()) {
        var handler = db.TransactionHandler; // should be CommitFailureHandler
        db.AddToDemoTable(new DemoTable { Name = "TestEntiry1" });
        db.SaveChanges();
    }
}

或DbConfiguration。

加载事件
static void Main(string[] args)
{
    DbConfiguration.Loaded += DbConfiguration_Loaded;
    using (var db = new TransactionHandlerDemoEntities()) {
        var handler = db.TransactionHandler;
        db.AddToDemoTable(new DemoTable { Name = "TestEntiry1" });
        db.SaveChanges();
    }
}
static void DbConfiguration_Loaded(object sender, DbConfigurationLoadedEventArgs e)
{
    e.AddDependencyResolver(new TransactionHandlerResolver(
        () => new CommitFailureHandler(),
        SqlProviderServices.ProviderInvariantName,
        null),true);
}

TransactionHandlerDemoEntities是ObjectContext。

这是DbContext独有的。如果可以,尽快将基于objectcontext的应用程序重构为DbContext。我认为将会出现更多只能与DbContext API一起工作的新特性。也许有一天ObjectContext甚至会被弃用作为公共API。

您可以从ObjectContext创建DbContext,但我认为这对您没有多大帮助。毫无疑问,主要的问题是数据逻辑的其余部分目前期望ObjectContext