我在一个函数中运行了2个INSERTS。第一个是非实体框架INSERT(AD0.NET)。第二个是EntityContext.SaveChanges()
我可以不在交易范围内嵌套这两个吗?
答案 0 :(得分:0)
是的,你可以
using (TransactionScope scope = new TransactionScope())
{
InsertRecord();
context.SaveChanges();
scope.Complete();
}
答案 1 :(得分:0)
正如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
}
两个不同的数据库插入(两个不同的并发连接)将导致transactioncope升级到分布式事务。使用DTCPIng.exe进行测试可以在问题中的机器之间进行测试。
P.S。不同的数据库具有自己的默认隔离级别,因此最佳做法是在代码中指定它,例如SQL Server Express默认使用Serializable,SQL Server(完整版)不使用!