Commit a9e0743f authored by yangxiaodong's avatar yangxiaodong

fixed issue #25

parent 1248facd
...@@ -34,13 +34,17 @@ namespace DotNetCore.CAP.MySql ...@@ -34,13 +34,17 @@ namespace DotNetCore.CAP.MySql
protected override void PrepareConnectionForEF() protected override void PrepareConnectionForEF()
{ {
DbConnection = _dbContext.Database.GetDbConnection(); DbConnection = _dbContext.Database.GetDbConnection();
var transaction = _dbContext.Database.CurrentTransaction; var dbContextTransaction = _dbContext.Database.CurrentTransaction;
if (transaction == null) var dbTrans = dbContextTransaction?.GetDbTransaction();
//DbTransaction is dispose in original
if (dbTrans?.Connection == null)
{ {
IsCapOpenedTrans = true; IsCapOpenedTrans = true;
transaction = _dbContext.Database.BeginTransaction(IsolationLevel.ReadCommitted); dbContextTransaction?.Dispose();
dbContextTransaction = _dbContext.Database.BeginTransaction(IsolationLevel.ReadCommitted);
dbTrans = dbContextTransaction.GetDbTransaction();
} }
DbTranasaction = transaction.GetDbTransaction(); DbTranasaction = dbTrans;
} }
protected override void Execute(IDbConnection dbConnection, IDbTransaction dbTransaction, CapPublishedMessage message) protected override void Execute(IDbConnection dbConnection, IDbTransaction dbTransaction, CapPublishedMessage message)
......
...@@ -34,13 +34,17 @@ namespace DotNetCore.CAP.PostgreSql ...@@ -34,13 +34,17 @@ namespace DotNetCore.CAP.PostgreSql
protected override void PrepareConnectionForEF() protected override void PrepareConnectionForEF()
{ {
DbConnection = _dbContext.Database.GetDbConnection(); DbConnection = _dbContext.Database.GetDbConnection();
var transaction = _dbContext.Database.CurrentTransaction; var dbContextTransaction = _dbContext.Database.CurrentTransaction;
if (transaction == null) var dbTrans = dbContextTransaction?.GetDbTransaction();
//DbTransaction is dispose in original
if (dbTrans?.Connection == null)
{ {
IsCapOpenedTrans = true; IsCapOpenedTrans = true;
transaction = _dbContext.Database.BeginTransaction(IsolationLevel.ReadCommitted); dbContextTransaction?.Dispose();
dbContextTransaction = _dbContext.Database.BeginTransaction(IsolationLevel.ReadCommitted);
dbTrans = dbContextTransaction.GetDbTransaction();
} }
DbTranasaction = transaction.GetDbTransaction(); DbTranasaction = dbTrans;
} }
protected override void Execute(IDbConnection dbConnection, IDbTransaction dbTransaction, CapPublishedMessage message) protected override void Execute(IDbConnection dbConnection, IDbTransaction dbTransaction, CapPublishedMessage message)
......
using System; using System;
using System.Data; using System.Data;
using System.Data.SqlClient;
using System.Threading.Tasks; using System.Threading.Tasks;
using Dapper; using Dapper;
using DotNetCore.CAP.Abstractions; using DotNetCore.CAP.Abstractions;
...@@ -34,13 +35,17 @@ namespace DotNetCore.CAP.SqlServer ...@@ -34,13 +35,17 @@ namespace DotNetCore.CAP.SqlServer
protected override void PrepareConnectionForEF() protected override void PrepareConnectionForEF()
{ {
DbConnection = _dbContext.Database.GetDbConnection(); DbConnection = _dbContext.Database.GetDbConnection();
var transaction = _dbContext.Database.CurrentTransaction; var dbContextTransaction = _dbContext.Database.CurrentTransaction;
if (transaction == null) var dbTrans = dbContextTransaction?.GetDbTransaction();
//DbTransaction is dispose in original
if (dbTrans?.Connection == null)
{ {
IsCapOpenedTrans = true; IsCapOpenedTrans = true;
transaction = _dbContext.Database.BeginTransaction(IsolationLevel.ReadCommitted); dbContextTransaction?.Dispose();
dbContextTransaction = _dbContext.Database.BeginTransaction(IsolationLevel.ReadCommitted);
dbTrans = dbContextTransaction.GetDbTransaction();
} }
DbTranasaction = transaction.GetDbTransaction(); DbTranasaction = dbTrans;
} }
protected override void Execute(IDbConnection dbConnection, IDbTransaction dbTransaction, CapPublishedMessage message) protected override void Execute(IDbConnection dbConnection, IDbTransaction dbTransaction, CapPublishedMessage message)
...@@ -53,7 +58,6 @@ namespace DotNetCore.CAP.SqlServer ...@@ -53,7 +58,6 @@ namespace DotNetCore.CAP.SqlServer
protected override async Task ExecuteAsync(IDbConnection dbConnection, IDbTransaction dbTransaction, CapPublishedMessage message) protected override async Task ExecuteAsync(IDbConnection dbConnection, IDbTransaction dbTransaction, CapPublishedMessage message)
{ {
await dbConnection.ExecuteAsync(PrepareSql(), message, dbTransaction); await dbConnection.ExecuteAsync(PrepareSql(), message, dbTransaction);
_logger.LogInformation("Published Message has been persisted in the database. name:" + message.ToString()); _logger.LogInformation("Published Message has been persisted in the database. name:" + message.ToString());
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment