DbContextTransaction.Commit() 和 context.Database.CommitTransaction() 之间的区别
Difference between DbContextTransaction.Commit() and context.Database.CommitTransaction()
两种提交类型之间的主要区别是什么?
bool adresVarmi = false;
using (var trans = dbContext.Database.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted))
{
adresVarmi = dbContext.MUSTERI_ADRES.Where(x => x.MUSTERI_TANIM_ID == dto.MusteriId).AsNoTracking().Count() > 0;
trans.Commit();
dbContext.Database.CommitTransaction();
}
对于高流量应用也是一样吗?
context.Database.CommitTransaction()
相当于
context.Database.CurrentTransaction.Commit()
该方法的主要目的是能够从未调用 BeginTransaction()
或无权访问返回的 IDbContextTransaction
对象的代码提交当前事务。如果当前没有活动事务,它将失败。
由于您是启动事务并有权访问返回的 IDbContextTransaction
对象的人,因此最好对其发出 Commit()
而不是使用 CommitTransaction()
方法。
即以下是首选(请注意,您不应该像在您的示例中那样调用两者,因为第二个将失败,因为在 Commit()
调用之后不会有活动事务):
using (var trans = dbContext.Database.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted))
{
// do something...
trans.Commit();
}
两种提交类型之间的主要区别是什么?
bool adresVarmi = false;
using (var trans = dbContext.Database.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted))
{
adresVarmi = dbContext.MUSTERI_ADRES.Where(x => x.MUSTERI_TANIM_ID == dto.MusteriId).AsNoTracking().Count() > 0;
trans.Commit();
dbContext.Database.CommitTransaction();
}
对于高流量应用也是一样吗?
context.Database.CommitTransaction()
相当于
context.Database.CurrentTransaction.Commit()
该方法的主要目的是能够从未调用 BeginTransaction()
或无权访问返回的 IDbContextTransaction
对象的代码提交当前事务。如果当前没有活动事务,它将失败。
由于您是启动事务并有权访问返回的 IDbContextTransaction
对象的人,因此最好对其发出 Commit()
而不是使用 CommitTransaction()
方法。
即以下是首选(请注意,您不应该像在您的示例中那样调用两者,因为第二个将失败,因为在 Commit()
调用之后不会有活动事务):
using (var trans = dbContext.Database.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted))
{
// do something...
trans.Commit();
}