MasstransitMeditor 不在efcore 同一个事务
continuous-integration/drone/push Build is passing Details

IRC_NewDev
hang 2024-09-28 21:21:52 +08:00
parent 1bacc222be
commit 7693c72802
7 changed files with 29 additions and 29 deletions

View File

@ -151,6 +151,7 @@ builder.Services.AddMediator(cfg =>
{ {
cfg.AddConsumer<ConsistencyCheckConsumer>(); cfg.AddConsumer<ConsistencyCheckConsumer>();
cfg.AddConsumer<AddUserLogTriggerConsumer>(); cfg.AddConsumer<AddUserLogTriggerConsumer>();
cfg.AddConsumer<AddSubjectTriggerConsumer>();
}); });
// 添加 MassTransit 和 InMemory 传输 // 添加 MassTransit 和 InMemory 传输

View File

@ -12658,7 +12658,8 @@
</member> </member>
<member name="T:IRaCIS.Core.Application.MassTransit.Consumer.AddSubjectTriggerConsumer"> <member name="T:IRaCIS.Core.Application.MassTransit.Consumer.AddSubjectTriggerConsumer">
<summary> <summary>
添加Subject 触发添加访视 不能代替 Trigger,稽查BatchId 不一致 暂时废弃 添加Subject 触发添加访视 不能代替 Trigger,稽查BatchId 不一致
因为消费者这里的数据库上下文 和消息发送者上下文不是同一个,相当于两个独立的事务
</summary> </summary>
<param name="_subjectVisitRepository"></param> <param name="_subjectVisitRepository"></param>
<param name="_visitStageRepository"></param> <param name="_visitStageRepository"></param>
@ -12667,7 +12668,8 @@
</member> </member>
<member name="M:IRaCIS.Core.Application.MassTransit.Consumer.AddSubjectTriggerConsumer.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitStage},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},AutoMapper.IMapper)"> <member name="M:IRaCIS.Core.Application.MassTransit.Consumer.AddSubjectTriggerConsumer.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.VisitStage},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},AutoMapper.IMapper)">
<summary> <summary>
添加Subject 触发添加访视 不能代替 Trigger,稽查BatchId 不一致 暂时废弃 添加Subject 触发添加访视 不能代替 Trigger,稽查BatchId 不一致
因为消费者这里的数据库上下文 和消息发送者上下文不是同一个,相当于两个独立的事务
</summary> </summary>
<param name="_subjectVisitRepository"></param> <param name="_subjectVisitRepository"></param>
<param name="_visitStageRepository"></param> <param name="_visitStageRepository"></param>

View File

@ -7,7 +7,8 @@ using MassTransit;
namespace IRaCIS.Core.Application.MassTransit.Consumer; namespace IRaCIS.Core.Application.MassTransit.Consumer;
/// <summary> /// <summary>
/// 添加Subject 触发添加访视 不能代替 Trigger,稽查BatchId 不一致 暂时废弃 /// 添加Subject 触发添加访视 不能代替 Trigger,稽查BatchId 不一致
/// 因为消费者这里的数据库上下文 和消息发送者上下文不是同一个,相当于两个独立的事务
/// </summary> /// </summary>
/// <param name="_subjectVisitRepository"></param> /// <param name="_subjectVisitRepository"></param>
/// <param name="_visitStageRepository"></param> /// <param name="_visitStageRepository"></param>
@ -41,6 +42,5 @@ public class AddSubjectTriggerConsumer(IRepository<SubjectVisit> _subjectVisitRe
}); });
await _subjectVisitRepository.AddRangeAsync(svList); await _subjectVisitRepository.AddRangeAsync(svList);
await _subjectVisitRepository.SaveChangesAsync();
} }
} }

View File

@ -4,11 +4,13 @@ using IRaCIS.Core.Application.BusinessFilter;
using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Application.Helper; using IRaCIS.Core.Application.Helper;
using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain;
using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure; using IRaCIS.Core.Infrastructure;
using IRaCIS.Core.Infrastructure.Encryption; using IRaCIS.Core.Infrastructure.Encryption;
using IRaCIS.Core.Infrastructure.NewtonsoftJson; using IRaCIS.Core.Infrastructure.NewtonsoftJson;
using MassTransit; using MassTransit;
using MassTransit.Mediator;
using Medallion.Threading; using Medallion.Threading;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
@ -119,6 +121,17 @@ namespace IRaCIS.Core.Application.Service
} }
public async Task<IResponseOutput> TestMasstransitMeditor([FromServices] IMediator _mediator, [FromServices] IRepository<TestLength> _testLengthRepository)
{
await _testLengthRepository.AddAsync(new TestLength() { Name = "zhouhang1" });
await _mediator.Send(new AddSubjectTriggerCommand { SubjectId = Guid.Empty });
await _testLengthRepository.SaveChangesAsync();
return ResponseOutput.Ok();
}
public async Task<IResponseOutput> TestJson() public async Task<IResponseOutput> TestJson()
{ {
var model1 = new TestModel() { TestId = NewId.NextSequentialGuid(), TestName = null }; var model1 = new TestModel() { TestId = NewId.NextSequentialGuid(), TestName = null };

View File

@ -117,7 +117,6 @@ namespace IRaCIS.Core.Application.Triggers
await _subjectVisitRepository.AddRangeAsync(svList); await _subjectVisitRepository.AddRangeAsync(svList);
//await _subjectVisitRepository.SaveChangesAsync();
} }

View File

@ -11,7 +11,4 @@ public interface IAuditAdd : IAuditAdd<Guid>
} }
public interface IAuditAddWithUserName : IAuditAdd<Guid>
{
public string CreateUser { get; set; }
}

View File

@ -12,7 +12,7 @@ using System.Data;
namespace IRaCIS.Core.Infra.EFCore; namespace IRaCIS.Core.Infra.EFCore;
public class AuditEntityInterceptor(IUserInfo _userInfo, public class AuditEntityInterceptor(IUserInfo _userInfo,
ILogger<AuditEntityInterceptor> _logger ILogger<AuditEntityInterceptor> _logger
, IMediator _mediator , IMediator _mediator
) : SaveChangesInterceptor ) : SaveChangesInterceptor
@ -28,9 +28,9 @@ public class AuditEntityInterceptor(IUserInfo _userInfo,
public override ValueTask<InterceptionResult<int>> SavingChangesAsync(DbContextEventData eventData, public override ValueTask<InterceptionResult<int>> SavingChangesAsync(DbContextEventData eventData,
InterceptionResult<int> result, CancellationToken cancellationToken = default) InterceptionResult<int> result, CancellationToken cancellationToken = default)
{ {
////领域命令 同一个事务提交的一些逻辑类似Trigger 保存事务之前执行的一些逻辑) //////领域命令 同一个事务提交的一些逻辑类似Trigger 保存事务之前执行的一些逻辑)
//eventData.Context.AddDomainCommands(); //eventData.Context.AddDomainCommands();
//DispatchDomainCommands(eventData.Context).GetAwaiter().GetResult(); //await DispatchDomainCommands(eventData.Context);
//领域事件 //领域事件
eventData.Context.AddDomainEvents(); eventData.Context.AddDomainEvents();
@ -41,6 +41,8 @@ public class AuditEntityInterceptor(IUserInfo _userInfo,
//IRC稽查 放在savechange 之前 不影响之前的逻辑 //IRC稽查 放在savechange 之前 不影响之前的逻辑
IRCDataInspection(eventData.Context); IRCDataInspection(eventData.Context);
//return result;
return base.SavingChangesAsync(eventData, result, cancellationToken); return base.SavingChangesAsync(eventData, result, cancellationToken);
} }
public override InterceptionResult<int> SavingChanges(DbContextEventData eventData, InterceptionResult<int> result) public override InterceptionResult<int> SavingChanges(DbContextEventData eventData, InterceptionResult<int> result)
@ -55,6 +57,8 @@ public class AuditEntityInterceptor(IUserInfo _userInfo,
//IRC稽查 放在savechange 之前 不影响之前的逻辑 //IRC稽查 放在savechange 之前 不影响之前的逻辑
IRCDataInspection(eventData.Context); IRCDataInspection(eventData.Context);
//return result;
return base.SavingChanges(eventData, result); return base.SavingChanges(eventData, result);
} }
public void AuditEntities(DbContext? context) public void AuditEntities(DbContext? context)
@ -122,22 +126,6 @@ public class AuditEntityInterceptor(IUserInfo _userInfo,
updateEntity.UpdateTime = DateTime.Now; updateEntity.UpdateTime = DateTime.Now;
updateEntity.UpdateUserId = _userInfo.Id; updateEntity.UpdateUserId = _userInfo.Id;
} }
if (entry.Entity is IAuditAddWithUserName addEntity3)
{
if (addEntity3.CreateTime == default(DateTime))
{
addEntity3.CreateTime = DateTime.Now;
}
if (addEntity3.CreateUserId == default(Guid))
{
addEntity3.CreateUserId = _userInfo.Id;
addEntity3.CreateUser = _userInfo.RealName;
}
}
break; break;
} }
} }
@ -164,7 +152,6 @@ public class AuditEntityInterceptor(IUserInfo _userInfo,
#region 异常处理 #region 异常处理
#endregion
private void LoggerDBContextException(DbContextErrorEventData eventData) private void LoggerDBContextException(DbContextErrorEventData eventData)
{ {
@ -225,6 +212,7 @@ public class AuditEntityInterceptor(IUserInfo _userInfo,
base.SaveChangesFailed(eventData); base.SaveChangesFailed(eventData);
} }
#endregion
#region 领域命令分发 #region 领域命令分发