我在一个函数中运行两个插入。第一个是非实体框架插入(AD0.NET)。第二个是EntityContext.SaveChanges()
我能不能在一个事务作用域中同时嵌套这两个?
发布于 2011-09-23 15:26:21
是的,你可以
using (TransactionScope scope = new TransactionScope())
{
InsertRecord();
context.SaveChanges();
scope.Complete();
}发布于 2012-10-05 19:00:24
正如Eranga所说,这是完全可行的,尽管有点混乱。
请参阅this link for peace of mind on TransactionScope
还要考虑设置事务作用域的隔离级别,例如
TransactionOptions options = new TransactionOptions();
options.IsolationLevel = IsolationLevel.Serializable;
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
{
// Do something here
}两个不同的数据库插入(两个不同的并发连接)将导致事务作用域升级为分布式事务。使用DTCPIng.exe测试它将在所讨论的机器之间工作。
附注:不同的数据库有自己的默认隔离级别,所以最好在代码中指定它,例如,SQL Server Express默认使用Serializable,而SQL Server (完整版)不使用Serializable!
https://stackoverflow.com/questions/7525325
复制相似问题