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();
}