文章插图
7、IPipelineBehavior这个接口的作用就是在我们命令处理之前或者之后插入逻辑,类似我们的中间件,我新建一个TransactionBehavior来处理保存数据库之前之后的操作,这里的代码只判断了是否为空之前写的是判断事务是否为空,代码多就随便写了意思意思 。
然后新建一个DBTransactionBehavior这里对操作数据库新增演示一下
using MediatR;using Microsoft.EntityFrameworkCore;using Microsoft.EntityFrameworkCore.Metadata.Internal;namespace MediatApi.Helper{ public class TransactionBehavior<TDBContext, TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse> where TRequest : IRequest<TResponse> where TDBContext : WyyDbContext { ILogger _logger; WyyDbContext _dbContext; public TransactionBehavior(ILogger logger, WyyDbContext dbContext) { _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _dbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext)); } public async Task<TResponse> Handle(TRequest request, RequestHandlerDelegate<TResponse> next, CancellationToken cancellationToken) { var response = default(TResponse); try { Console.WriteLine("执行前逻辑++++++++++++++++++++++++++++++++++"); Console.WriteLine(); if (request != null) return await next(); Console.WriteLine("逻辑不对处理++++++++++++++++++++++++++++++++"); Console.WriteLine(); var strategy = _dbContext.Database.CreateExecutionStrategy(); await strategy.ExecuteAsync(async () => { Guid transactionId; using (var transaction = await _dbContext.Database.BeginTransactionAsync()) using (_logger.BeginScope("TransactionContext:{TransactionId}", transaction.TransactionId)) { _logger.LogInformation("----- 开始事务 {TransactionId} 请求{request}", transaction.TransactionId, request); response = await next(); _logger.LogInformation("----- 提交事务 {TransactionId}}", transaction.TransactionId); await _dbContext.CommitTransactionAsync(transaction); transactionId = transaction.TransactionId; } }); return response; } catch(Exception ex) { _logger.LogError(ex, "处理事务出错{@Command}", request); throw; } } }}
经验总结扩展阅读
- 常用Python库整理
- 2023年1月24日建造寺庙好吗 2023年1月24日建造寺庙行吗
- 中式装修风格怎么搭配更好看 中式风格装修注意事项有哪些
- 2023年1月24日修筑堤坝好吗 2023年1月24日是修筑堤坝的黄道吉日吗
- 2023年1月24日粉刷墙壁好吗 2023年1月24日是粉刷墙壁的黄道吉日吗
- 2023年1月24日厨房移位好吗 2023年1月24日厨房移位行吗
- 加拿大高中排名 加拿大高中排名
- 2023中秋祝福语送客户
- 2023中秋祝福语送领导
- 2023送给领导的中秋祝福语