Mango.Nop.Libraries/Mango.Nop.Data/docs/TRANSACTIONS.md

1.9 KiB

Transaction Pattern

Part of Mango.Nop.Data. See Mango.Nop.Data/README.md for project overview. For repository base classes see docs/REPOSITORIES.md.

MgDbContextBase

Abstract database context base. NOT an EF Core DbContext — wraps INopDataProvider and IRepository<T> nopCommerce repos.

Constructor:

MgDbContextBase(IRepository<Product>, IRepository<Order>, IRepository<OrderItem>, INopDataProvider, IMgLockService, ILogger)

Standard Repositories

Property Type
Orders IRepository<Order>
OrderItems IRepository<OrderItem>
Products IRepository<Product>
DataProvider INopDataProvider (LinqToDB raw queries)
Logger Mango ILogger
LockService IMgLockService (global SemaphoreSlim)

4 Transaction Methods

Method Lock Async
Transaction(callback) No No
TransactionSafe(callback) SemaphoreSlim No
TransactionAsync(callback) No Yes (thread pool)
TransactionSafeAsync(callback) SemaphoreSlim Yes (thread pool)

Callback contract: Func<TransactionScope, (Task<)bool(>)> — return true to commit (Complete()), false to rollback.

Isolation level: ReadCommitted

Error handling: Catches exceptions, logs, returns false (unless throwException = true).

TransactionSafe variants: Use LockService.SemaphoreSlim for global serialization. Use for order creation, stock adjustment — any operation where concurrent modifications would corrupt data.

Async variants: Run on thread pool via TaskHelper.ToThreadPoolTask().

MgDalBase<TDbContext>

Data Access Layer orchestrator. Thin wrapper exposing:

Property Type Purpose
Name string DAL instance name
Context TDbContext The DB context (typed)
MutextLock Mutex Cross-process locking