La bonne façon d'utiliser BeginTransaction avec Dapper.IDbConnection

Qui est la bonne façon d'utiliser BeginTransaction() avec IDbConnection dans Dapper ?

J'ai créé une méthode dans laquelle je dois utiliser BeginTransaction(). Voici le code.

using (IDbConnection cn = DBConnection)
{
    var oTransaction = cn.BeginTransaction();

    try
    {
        //SAVE BASIC CONSULT DETAIL
        var oPara = new DynamicParameters();
        oPara.Add("@PatientID", iPatientID, dbType: DbType.Int32);
        ..........blah......blah............
    }
    catch (Exception ex)
    {
        oTransaction.Rollback();
        return new SaveResponse { Success = false, ResponseString = ex.Message };
    }
}

Quand j'ai exécuté méthode ci-dessus - j'ai eu une exception -

Opération non valide. La connexion est fermée.

C'est parce que vous ne pouvez pas commencer une transaction avant la connexion est ouverte. Alors quand j'ai ajouter cette ligne: cn.Open();, l'erreur est résolue. Mais j'ai lu quelque part que de l'ouvrir manuellement la connexion est mauvaise pratique!! Dapper ouvre une connexion uniquement quand il en a besoin.

Dans le cadre de l'Entité que vous pouvez gérer une transaction à l'aide d'un TransactionScope.

Donc ma question est qu'est ce qu'une bonne pratique pour gérer des transactions sans l'ajout de la ligne cn.Open()... dans Dapper ? Je suppose qu'il devrait y avoir un bon moyen pour cela.