SetTransactionHandler for ObjectContext
本文关键字:ObjectContext for SetTransactionHandler | 更新日期: 2023-09-27 18:10:01
如何设置ObjectContext的TransactionHandler ?
我正在检查这个例子:事务提交失败的处理,但它只显示为DbContext.
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
。