From b3d64a809427bb8a0d5df3e5d6178c17c126e517 Mon Sep 17 00:00:00 2001 From: Savorboard Date: Sat, 25 Aug 2018 20:57:16 +0800 Subject: [PATCH] implement SqlServerCapTransaction --- .../ICapTransaction.SqlServer.cs | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/DotNetCore.CAP.SqlServer/ICapTransaction.SqlServer.cs b/src/DotNetCore.CAP.SqlServer/ICapTransaction.SqlServer.cs index 19d1eec..6afcfbf 100644 --- a/src/DotNetCore.CAP.SqlServer/ICapTransaction.SqlServer.cs +++ b/src/DotNetCore.CAP.SqlServer/ICapTransaction.SqlServer.cs @@ -25,7 +25,21 @@ namespace DotNetCore.CAP protected override void AddToSent(CapPublishedMessage msg) { - var transactionKey = ((SqlConnection)((IDbTransaction)DbTransaction).Connection).ClientConnectionId; + var dbTransaction = DbTransaction as IDbTransaction; + if (dbTransaction == null) + { + if (DbTransaction is IDbContextTransaction dbContextTransaction) + { + dbTransaction = dbContextTransaction.GetDbTransaction(); + } + + if (dbTransaction == null) + { + throw new ArgumentNullException(nameof(DbTransaction)); + } + } + + var transactionKey = ((SqlConnection)dbTransaction.Connection).ClientConnectionId; if (_diagnosticProcessor.BufferList.TryGetValue(transactionKey, out var list)) { list.Add(msg); @@ -39,12 +53,28 @@ namespace DotNetCore.CAP public override void Commit() { - throw new NotImplementedException(); + switch (DbTransaction) + { + case IDbTransaction dbTransaction: + dbTransaction.Commit(); + break; + case IDbContextTransaction dbContextTransaction: + dbContextTransaction.Commit(); + break; + } } public override void Rollback() { - throw new NotImplementedException(); + switch (DbTransaction) + { + case IDbTransaction dbTransaction: + dbTransaction.Rollback(); + break; + case IDbContextTransaction dbContextTransaction: + dbContextTransaction.Rollback(); + break; + } } public override void Dispose()