我有一组关于在EF 6中使用事务的问题。我在数据库查询中使用了以下代码模板:
using (var ctx = new MyContext(connectionString))
{
using (var tx = ctx.Database.BeginTransaction(IsolationLevel.Snapshot))
{
try
{
// query database
ctx.SaveChanges();
tx.Commit();
}
catch(Exception ex)
{
tx.Rollback();
if(ex is A) // handle A
if(ex is B) // handle B
throw;
}
}
}
SaveChanges()
一次。如果发生异常,是否需要回滚事务?SaveChanges()
。在这种情况下,我应该仍然调用Commit()
吗?SqlAzureExecutionStrategy
来实现连接弹性。在某一时刻会发生瞬态故障吗?它只是在执行查询或调用SaveChanges()
时使用吗?ctx
、tx
和Commit()
调用的初始化如何?它们会导致这样的失败吗?SqlAzureExecutionStrategy
或DbExecutionStrategy
派生出来。我完全支持尽可能多地重构代码。发布于 2014-04-08 20:37:49
您不必实际使用实体框架.中的事务
默认的隔离模式是读取提交的,完全符合99%的需求,例如。读取数据。当您想保存对数据库所做的更改(Create、Update、Delete)时,EntityFramework足够聪明地创建一个事务,而无需在幕后通知您来包装这些更改。您可以确保所有的东西都会被保存,或者每一个更改都会被丢弃(原子性)。
看这里,https://coderwall.com/p/jnniww
SqlAzureExecutionStrategy for connection resiliency
。但是,这个特性得到了ADO.Net Framework4.5.1 http://blogs.msdn.com/b/dotnet/archive/2013/10/17/net-framework-4-5-1-rtm-gt-start-coding.aspx中新的http://blogs.msdn.com/b/dotnet/archive/2013/10/17/net-framework-4-5-1-rtm-gt-start-coding.aspx空闲连接弹性的补充。基本实体框架操作块。
using (var context = new ProductContext())
{
try
{
// Perform data access using the context
context.SaveChanges();
}
catch(Exception ex)
{
//handle exception
}
}
希望它能对你有帮助,祝你今天愉快。
https://stackoverflow.com/questions/22952166
复制