@@ -3,6 +3,8 @@ | |||||
using System.Data; | using System.Data; | ||||
using System.Diagnostics; | using System.Diagnostics; | ||||
using System.Threading; | |||||
using System.Threading.Tasks; | |||||
using Microsoft.EntityFrameworkCore.Infrastructure; | using Microsoft.EntityFrameworkCore.Infrastructure; | ||||
using Microsoft.EntityFrameworkCore.Storage; | using Microsoft.EntityFrameworkCore.Storage; | ||||
using Microsoft.Extensions.DependencyInjection; | using Microsoft.Extensions.DependencyInjection; | ||||
@@ -33,6 +35,22 @@ namespace DotNetCore.CAP | |||||
Flush(); | Flush(); | ||||
} | } | ||||
public override async Task CommitAsync(CancellationToken cancellationToken = default) | |||||
{ | |||||
Debug.Assert(DbTransaction != null); | |||||
switch (DbTransaction) | |||||
{ | |||||
case IDbTransaction dbTransaction: | |||||
dbTransaction.Commit(); | |||||
break; | |||||
case IDbContextTransaction dbContextTransaction: | |||||
await dbContextTransaction.CommitAsync(cancellationToken); | |||||
break; | |||||
} | |||||
Flush(); | |||||
} | |||||
public override void Rollback() | public override void Rollback() | ||||
{ | { | ||||
Debug.Assert(DbTransaction != null); | Debug.Assert(DbTransaction != null); | ||||
@@ -48,6 +66,21 @@ namespace DotNetCore.CAP | |||||
} | } | ||||
} | } | ||||
public override async Task RollbackAsync(CancellationToken cancellationToken = default) | |||||
{ | |||||
Debug.Assert(DbTransaction != null); | |||||
switch (DbTransaction) | |||||
{ | |||||
case IDbTransaction dbTransaction: | |||||
dbTransaction.Rollback(); | |||||
break; | |||||
case IDbContextTransaction dbContextTransaction: | |||||
await dbContextTransaction.RollbackAsync(cancellationToken); | |||||
break; | |||||
} | |||||
} | |||||
public override void Dispose() | public override void Dispose() | ||||
{ | { | ||||
(DbTransaction as IDbTransaction)?.Dispose(); | (DbTransaction as IDbTransaction)?.Dispose(); | ||||
@@ -2,6 +2,8 @@ | |||||
// Licensed under the MIT License. See License.txt in the project root for license information. | // Licensed under the MIT License. See License.txt in the project root for license information. | ||||
using System; | using System; | ||||
using System.Threading; | |||||
using System.Threading.Tasks; | |||||
using DotNetCore.CAP; | using DotNetCore.CAP; | ||||
// ReSharper disable once CheckNamespace | // ReSharper disable once CheckNamespace | ||||
@@ -15,10 +17,12 @@ namespace Microsoft.EntityFrameworkCore.Storage | |||||
public CapEFDbTransaction(ICapTransaction transaction) | public CapEFDbTransaction(ICapTransaction transaction) | ||||
{ | { | ||||
_transaction = transaction; | _transaction = transaction; | ||||
var dbContextTransaction = (IDbContextTransaction) _transaction.DbTransaction; | |||||
var dbContextTransaction = (IDbContextTransaction)_transaction.DbTransaction; | |||||
TransactionId = dbContextTransaction.TransactionId; | TransactionId = dbContextTransaction.TransactionId; | ||||
} | } | ||||
public Guid TransactionId { get; } | |||||
public void Dispose() | public void Dispose() | ||||
{ | { | ||||
_transaction.Dispose(); | _transaction.Dispose(); | ||||
@@ -29,11 +33,25 @@ namespace Microsoft.EntityFrameworkCore.Storage | |||||
_transaction.Commit(); | _transaction.Commit(); | ||||
} | } | ||||
public Task CommitAsync(CancellationToken cancellationToken = default) | |||||
{ | |||||
return _transaction.CommitAsync(cancellationToken); | |||||
} | |||||
public void Rollback() | public void Rollback() | ||||
{ | { | ||||
_transaction.Rollback(); | _transaction.Rollback(); | ||||
} | } | ||||
public Guid TransactionId { get; } | |||||
public Task RollbackAsync(CancellationToken cancellationToken = default) | |||||
{ | |||||
return _transaction.CommitAsync(cancellationToken); | |||||
} | |||||
public ValueTask DisposeAsync() | |||||
{ | |||||
Dispose(); | |||||
return new ValueTask(); | |||||
} | |||||
} | } | ||||
} | } |
@@ -1,4 +1,6 @@ | |||||
using System.Collections.Concurrent; | using System.Collections.Concurrent; | ||||
using System.Threading; | |||||
using System.Threading.Tasks; | |||||
using DotNetCore.CAP.Persistence; | using DotNetCore.CAP.Persistence; | ||||
namespace DotNetCore.CAP | namespace DotNetCore.CAP | ||||
@@ -36,8 +38,12 @@ namespace DotNetCore.CAP | |||||
public abstract void Commit(); | public abstract void Commit(); | ||||
public abstract Task CommitAsync(CancellationToken cancellationToken = default); | |||||
public abstract void Rollback(); | public abstract void Rollback(); | ||||
public abstract Task RollbackAsync(CancellationToken cancellationToken = default); | |||||
public abstract void Dispose(); | public abstract void Dispose(); | ||||
} | } | ||||
} | } |
@@ -2,6 +2,8 @@ | |||||
// Licensed under the MIT License. See License.txt in the project root for license information. | // Licensed under the MIT License. See License.txt in the project root for license information. | ||||
using System; | using System; | ||||
using System.Threading; | |||||
using System.Threading.Tasks; | |||||
namespace DotNetCore.CAP | namespace DotNetCore.CAP | ||||
{ | { | ||||
@@ -25,9 +27,13 @@ namespace DotNetCore.CAP | |||||
/// </summary> | /// </summary> | ||||
void Commit(); | void Commit(); | ||||
Task CommitAsync(CancellationToken cancellationToken = default); | |||||
/// <summary> | /// <summary> | ||||
/// We will delete the message data that has not been sstore in the buffer data of current transaction context. | /// We will delete the message data that has not been sstore in the buffer data of current transaction context. | ||||
/// </summary> | /// </summary> | ||||
void Rollback(); | void Rollback(); | ||||
Task RollbackAsync(CancellationToken cancellationToken = default); | |||||
} | } | ||||
} | } |