1.9 KiB
Transaction Pattern
Part of
Mango.Nop.Data. SeeMango.Nop.Data/README.mdfor project overview. For repository base classes seedocs/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 |