sql >> Databáze >  >> RDS >> Sqlserver

SqlConnection a zamezení povýšení na MSDTC

Jsem poněkud překvapen, že to vidíte, protože RequiresNew měl by znamená, že je izolován od jiné transakce; tato zpráva obvykle znamená, že v rámci transakčního rozsahu byla aktivována 2 připojení - jste si jisti? není v tomto bloku žádný jiný kód vytvářející/otevírající spojení?

Vámi navrhované řešení by mělo fungovat – i když v některých ohledech TransactionScopeOption.Suppress může být pohodlnější než změna konfigurace (ale obojí by mělo fungovat). Je tu však problém:transakce ADO.NET musí být předány jednotlivým příkazům, takže byste potřebovali (také trochu uklidit kód):

using(var transaction = conn.BeginTransaction()) {
    try {
        var count = _changeTracker.CommitChanges(conn, transaction);
        transaction.Commit();
        return count;
    } catch {
        transaction.Rollback();
        throw;
    }
}

kde CommitChanges přijímá transakci – možná pomocí volitelných parametrů:

int CommitChanges(DbConnection connection, DbTransaction transaction = null)
{ ... }

Vaše jméno DapperFactory naznačuje, že používáte "dapper" - v takovém případě to můžete jednoduše předat do "dapper", ať už je null nebo ne, tj.

conn.Execute(sql, args, transaction: transaction);


  1. Použití Simple Membership Provider s mysql

  2. Halloweenský problém – 3. část

  3. postgresql - počet (žádné hodnoty null) každého sloupce v tabulce

  4. Vytvoření databáze studentů pomocí Microsoft Access