实体框架TransactionScope回滚问题
本文关键字:问题 TransactionScope 框架 实体 | 更新日期: 2023-09-27 18:14:15
我正在使用带有TransactionScope的实体框架。看起来我遇到了一个问题,如果在调用TransactionScope的Complete()方法后出现死锁问题,那么我的所有更改都不会回滚。注意,在这个TransactionScope中,我正在更新两个独立的数据库,所以问题可能是它只回滚发生死锁问题的数据库的更改?
代码示例:
try
{
using (TransactionScope scope = new TransactionScope())
{
//Insert into database1 (getting the deadlock issue)
database1.SaveChanges();
//Update ExternalId (Identity PK from database1) in database2
database2.SaveChanges();
scope.Complete();
}
}
catch (Exception ex)
{
throw;
}
在上面的例子中,database2获得更新的ExternalId列,但记录从未插入到database1中,这很奇怪,因为ExternalId是我们在向database1插入记录时获得的身份记录。
如果您的连接是在TransactionScope之外创建(并打开?)的,那么需要通过调用Connection.EnlistTransaction(Transaction.Current);
来手动将其登记到事务中。例如
try
{
using (TransactionScope scope = new TransactionScope())
{
database1.Connection.EnlistTransaction(Transaction.Current);
database2.Connection.EnlistTransaction(Transaction.Current);
//Insert into database1 (getting the deadlock issue)
database1.SaveChanges();
//Update ExternalId (Identity PK from database1) in database2
database2.SaveChanges();
scope.Complete();
}
}
catch (Exception ex)
{
throw;
}