如何将TransactionHandler设置为ObjectContext?
我正在检查这个示例:事务提交失败的处理,但它只显示了DbContext。
发布于 2014-06-22 22:37:23
TransactionHandler也适用于ObjectContext。唯一的问题是,在第一个DbConfiguration实例化之前,没有计算基于代码的配置( DbContext )。
两种可能的解决办法
虚拟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.Loaded事件
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。
发布于 2014-06-22 21:22:56
这是专为DbContext设计的。如果可以,请尽快将基于ObjectContext的应用程序重构为DbContext。我认为将出现更多的新特性,这些特性只适用于DbContext API。也许有一天,ObjectContext甚至会被废弃为一个公共API。
你可以ObjectContext,但我不认为这对你有多大帮助。主要的问题无疑是,其他的数据逻辑目前期望ObjectContext。
https://stackoverflow.com/questions/24355314
复制相似问题