From 96a0a7c7b91921d1b85709e65d661481261af6bb Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 24 Aug 2022 10:26:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AE=A1=E8=AE=A1=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Trial/TrialExpedited.cs | 2 +- .../Context/IRaCISDBContext.cs | 166 ++++++++++-------- .../Context/Triggers/AuditAddTrigger.cs | 101 ++++++----- .../Context/Triggers/AuditUpdateTrigger.cs | 52 +++--- .../Context/Triggers/SoftDeleteTrigger.cs | 70 ++++---- 5 files changed, 200 insertions(+), 191 deletions(-) diff --git a/IRaCIS.Core.Domain.Share/Trial/TrialExpedited.cs b/IRaCIS.Core.Domain.Share/Trial/TrialExpedited.cs index 6820a0d9d..beb621e46 100644 --- a/IRaCIS.Core.Domain.Share/Trial/TrialExpedited.cs +++ b/IRaCIS.Core.Domain.Share/Trial/TrialExpedited.cs @@ -33,6 +33,6 @@ US=1, - USAndCN + USAndCN=2, } } \ No newline at end of file diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs index ba1a67a89..41d8f15ff 100644 --- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs +++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs @@ -89,7 +89,7 @@ namespace IRaCIS.Core.Infra.EFCore //modelBuilder.HasDbFunction(typeof(DbContext).GetMethod(nameof(GetTableList))); - + modelBuilder.Entity().HasMany(t => t.VisitTaskList).WithOne(t => t.DoctorUser).HasForeignKey(t => t.DoctorUserId).IsRequired(false); @@ -104,11 +104,11 @@ namespace IRaCIS.Core.Infra.EFCore modelBuilder.Entity().HasMany(t => t.TaskMedicalReviewList).WithOne(t => t.VisitTask).HasForeignKey(t => t.VisitTaskId); - modelBuilder.Entity().HasOne(t => t.Subject).WithMany(s=>s.SubjectVisitTaskList).HasForeignKey(t => t.SubjectId); + modelBuilder.Entity().HasOne(t => t.Subject).WithMany(s => s.SubjectVisitTaskList).HasForeignKey(t => t.SubjectId); modelBuilder.Entity().HasMany(t => t.TaskInfluenceList).WithOne(s => s.OriginalTask).HasForeignKey(t => t.OriginalTaskId); - + modelBuilder.Entity().HasMany(t => t.ChildList).WithOne(t => t.Parent); @@ -450,15 +450,16 @@ namespace IRaCIS.Core.Infra.EFCore public override int SaveChanges() { - //UpdateAuditInfo().GetAwaiter(); + + SetCommonEntityAuditInfo(); AddAudit().GetAwaiter(); return base.SaveChanges(); } public override async Task SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()) { - //await UpdateAuditInfo(); - + // 采用触发器的方式 设置 CreateUserId CreateTime UpdateTime UpdateUserId 稽查实体里面没有这四个字段的值 因为先后顺序的原因 + SetCommonEntityAuditInfo(); await AddAudit(); return await base.SaveChangesAsync(cancellationToken); } @@ -472,7 +473,7 @@ namespace IRaCIS.Core.Infra.EFCore var inspectionGeneralIdList = ChangeTracker.Entries().Where(t => typeof(DataInspection).IsAssignableFrom(t.Entity.GetType())).Select(t => ((DataInspection)t.Entity).GeneralId).ToList(); var entities = ChangeTracker.Entries().Where(u => (u.State == EntityState.Modified || u.State == EntityState.Deleted || u.State == EntityState.Added)) - .Where(t => ! typeof(DataInspection).IsAssignableFrom(t.Entity.GetType()) && !inspectionGeneralIdList.Contains(((Entity) t.Entity).Id )) + .Where(t => !typeof(DataInspection).IsAssignableFrom(t.Entity.GetType()) && !inspectionGeneralIdList.Contains(((Entity)t.Entity).Id)) .ToList(); AuditingData auditingData = new AuditingData(this, _userInfo); @@ -487,81 +488,88 @@ namespace IRaCIS.Core.Infra.EFCore } /// - /// 重写savechange方式 统一增加审计信息 CreateUserId CreateTime UpdateTime UpdateUserId 可用事件绑定的方式UpdateAuitUser + /// 重写savechange方式 统一增加审计信息 CreateUserId CreateTime UpdateTime Update UserId /// - //private async Task UpdateAuditInfo() - //{ + private void SetCommonEntityAuditInfo() + { + + ChangeTracker.DetectChanges(); // Important! + + // 获取所有更改,删除,新增的实体,但排除审计实体(避免死循环) + var entities = ChangeTracker.Entries() + .Where(u => (u.State == EntityState.Modified || u.State == EntityState.Deleted || u.State == EntityState.Added)).Where(x => !typeof(DataInspection).IsAssignableFrom(x.Entity.GetType())).ToList(); + + foreach (var t in entities) + { + switch (t.State) + { + + case EntityState.Deleted: + + break; + case EntityState.Modified: + + if (t.Entity is IAuditUpdate updateEntity1) + { + updateEntity1.UpdateTime = DateTime.UtcNow.AddHours(8); + updateEntity1.UpdateUserId = _userInfo.Id; + } + + if (t.Entity is ISoftDelete softDelete) + { + if (softDelete.IsDeleted) + { + softDelete.DeleteUserId = _userInfo.Id; + softDelete.DeletedTime = DateTime.UtcNow.AddHours(8); + } + else + { + softDelete.DeletedTime = null; + } + } + + break; + //添加的时候,更新审计字段也赋值 + case EntityState.Added: + + + if (t.Entity is IAuditAdd addEntity) + { + if (addEntity.CreateTime == default(DateTime)) + { + addEntity.CreateTime = DateTime.UtcNow.AddHours(8); + } + + addEntity.CreateUserId = _userInfo.Id; + } + + if (t.Entity is IAuditUpdate updateEntity) + { + updateEntity.UpdateTime = DateTime.UtcNow.AddHours(8); + updateEntity.UpdateUserId = _userInfo.Id; + } + + if (t.Entity is IAuditAddWithUserName addEntity3) + { + if (addEntity3.CreateTime == default(DateTime)) + { + addEntity3.CreateTime = DateTime.UtcNow.AddHours(8); + + } + + addEntity3.CreateUserId = _userInfo.Id; + addEntity3.CreateUser = _userInfo.RealName; + } + break; + } + } + + + } - - - //ChangeTracker.DetectChanges(); // Important! - - //// 获取所有更改,删除,新增的实体,但排除审计实体(避免死循环) - //var entities = ChangeTracker.Entries() - // .Where(u => (u.State == EntityState.Modified || u.State == EntityState.Deleted || u.State == EntityState.Added)).Where(x=>x.Entity.GetType()!=typeof(data)).ToList(); - //AuditingData auditingData = new AuditingData(this, _userInfo); - //await auditingData.IncomingEntitys(entities); - //var items = entities.SelectMany(x => x.Entity.GetType().ToString()); - - //foreach (var t in entities) - //{ - // switch (t.State) - // { - - // case EntityState.Deleted: - - // break; - // case EntityState.Modified: - - // if (t.Entity is IAuditUpdate updateEntity1) - // { - // updateEntity1.UpdateTime = DateTime.UtcNow.AddHours(8); - // updateEntity1.UpdateUserId = _userInfo.Id; - // } - - - // break; - // //添加的时候,更新审计字段也赋值 - // case EntityState.Added: - - // ////// 仓储添加时 就有id了 - // //if (t.Entity is Entity entity && entity.Id == Guid.Empty) - // //{ - // // entity.Id = NewId.NextGuid(); - // //} - - // if (t.Entity is IAuditAdd addEntity) - // { - // if (addEntity.CreateTime == default(DateTime)) - // { - // addEntity.CreateTime = DateTime.UtcNow.AddHours(8); - // } - - // addEntity.CreateUserId = _userInfo.Id; - // } - - // if (t.Entity is IAuditUpdate updateEntity) - // { - // updateEntity.UpdateTime = DateTime.UtcNow.AddHours(8); - // updateEntity.UpdateUserId = _userInfo.Id; - // } - - // if (t.Entity is IAuditAddWithUserName addEntity3) - // { - // addEntity3.CreateTime = DateTime.UtcNow.AddHours(8); - // addEntity3.CreateUserId = _userInfo.Id; - // addEntity3.CreateUser = _userInfo.RealName; - // } - // break; - // } - //} - - - //} - - + #region 更新审计信息 废弃 /// /// 事件绑定的方式 更新审计信息 废弃 @@ -618,6 +626,8 @@ namespace IRaCIS.Core.Infra.EFCore } } + #endregion + #endregion diff --git a/IRaCIS.Core.Infra.EFCore/Context/Triggers/AuditAddTrigger.cs b/IRaCIS.Core.Infra.EFCore/Context/Triggers/AuditAddTrigger.cs index cde808f2e..917c0ee51 100644 --- a/IRaCIS.Core.Infra.EFCore/Context/Triggers/AuditAddTrigger.cs +++ b/IRaCIS.Core.Infra.EFCore/Context/Triggers/AuditAddTrigger.cs @@ -1,67 +1,66 @@ -using System; -using System.Threading; -using System.Threading.Tasks; -using EntityFrameworkCore.Triggered; -using IRaCIS.Core.Domain.Models; -using IRaCIS.Core.Domain.Share; +//using System; +//using System.Threading; +//using System.Threading.Tasks; +//using EntityFrameworkCore.Triggered; +//using IRaCIS.Core.Domain.Models; +//using IRaCIS.Core.Domain.Share; -namespace IRaCIS.Core.Application.Triggers -{ - public class AuditAddTrigger: IBeforeSaveTrigger - { - private readonly IUserInfo _userInfo; +//namespace IRaCIS.Core.Application.Triggers +//{ +// public class AuditAddTrigger: IBeforeSaveTrigger +// { +// private readonly IUserInfo _userInfo; - public AuditAddTrigger(IUserInfo userInfo) - { - _userInfo = userInfo; - } +// public AuditAddTrigger(IUserInfo userInfo) +// { +// _userInfo = userInfo; +// } - public Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) - { - if (context.ChangeType == ChangeType.Added) - { - context.Entity.CreateUserId = _userInfo.Id; +// public Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) +// { +// if (context.ChangeType == ChangeType.Added) +// { +// context.Entity.CreateUserId = _userInfo.Id; - if (context.Entity.CreateTime == default(DateTime)) - { - context.Entity.CreateTime = DateTime.UtcNow.AddHours(8); +// if (context.Entity.CreateTime == default(DateTime)) +// { +// context.Entity.CreateTime = DateTime.UtcNow.AddHours(8); - } +// } - } +// } - return Task.CompletedTask; +// return Task.CompletedTask; - } - } +// } +// } - public class AuditAddWithUsernameTrigger : IBeforeSaveTrigger - { - private readonly IUserInfo _userInfo; +// public class AuditAddWithUsernameTrigger : IBeforeSaveTrigger +// { +// private readonly IUserInfo _userInfo; - public AuditAddWithUsernameTrigger(IUserInfo userInfo) - { - _userInfo = userInfo; - } +// public AuditAddWithUsernameTrigger(IUserInfo userInfo) +// { +// _userInfo = userInfo; +// } - public Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) - { - if (context.ChangeType == ChangeType.Added) - { - context.Entity.CreateUserId = _userInfo.Id; - context.Entity.CreateUser = _userInfo.UserName; +// public Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) +// { +// if (context.ChangeType == ChangeType.Added) +// { +// context.Entity.CreateUserId = _userInfo.Id; +// context.Entity.CreateUser = _userInfo.UserName; - if (context.Entity.CreateTime == default(DateTime)) - { - context.Entity.CreateTime = DateTime.UtcNow.AddHours(8); - - } - } +// if (context.Entity.CreateTime == default(DateTime)) +// { +// context.Entity.CreateTime = DateTime.UtcNow.AddHours(8); +// } +// } - return Task.CompletedTask; +// return Task.CompletedTask; - } - } -} \ No newline at end of file +// } +// } +//} \ No newline at end of file diff --git a/IRaCIS.Core.Infra.EFCore/Context/Triggers/AuditUpdateTrigger.cs b/IRaCIS.Core.Infra.EFCore/Context/Triggers/AuditUpdateTrigger.cs index 496a60134..3df8319ce 100644 --- a/IRaCIS.Core.Infra.EFCore/Context/Triggers/AuditUpdateTrigger.cs +++ b/IRaCIS.Core.Infra.EFCore/Context/Triggers/AuditUpdateTrigger.cs @@ -1,33 +1,33 @@ -using System; -using System.Threading; -using System.Threading.Tasks; -using EntityFrameworkCore.Triggered; -using IRaCIS.Core.Domain.Models; -using IRaCIS.Core.Domain.Share; +//using System; +//using System.Threading; +//using System.Threading.Tasks; +//using EntityFrameworkCore.Triggered; +//using IRaCIS.Core.Domain.Models; +//using IRaCIS.Core.Domain.Share; -namespace IRaCIS.Core.Application.Triggers -{ - public class AuditUpdateTrigger : IBeforeSaveTrigger - { - private readonly IUserInfo _userInfo; +//namespace IRaCIS.Core.Application.Triggers +//{ +// public class AuditUpdateTrigger : IBeforeSaveTrigger +// { +// private readonly IUserInfo _userInfo; - public AuditUpdateTrigger(IUserInfo userInfo) - { - _userInfo = userInfo; - } +// public AuditUpdateTrigger(IUserInfo userInfo) +// { +// _userInfo = userInfo; +// } - public Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) - { - if (context.ChangeType == ChangeType.Modified || context.ChangeType == ChangeType.Added) - { - context.Entity.UpdateTime = DateTime.UtcNow.AddHours(8); +// public Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) +// { +// if (context.ChangeType == ChangeType.Modified || context.ChangeType == ChangeType.Added) +// { +// context.Entity.UpdateTime = DateTime.UtcNow.AddHours(8); - context.Entity.UpdateUserId = _userInfo.Id; +// context.Entity.UpdateUserId = _userInfo.Id; - } +// } - return Task.CompletedTask; +// return Task.CompletedTask; - } - } -} \ No newline at end of file +// } +// } +//} \ No newline at end of file diff --git a/IRaCIS.Core.Infra.EFCore/Context/Triggers/SoftDeleteTrigger.cs b/IRaCIS.Core.Infra.EFCore/Context/Triggers/SoftDeleteTrigger.cs index 7e405c232..afa7d0cee 100644 --- a/IRaCIS.Core.Infra.EFCore/Context/Triggers/SoftDeleteTrigger.cs +++ b/IRaCIS.Core.Infra.EFCore/Context/Triggers/SoftDeleteTrigger.cs @@ -1,41 +1,41 @@ -using System; -using System.Threading; -using System.Threading.Tasks; -using EntityFrameworkCore.Triggered; -using IRaCIS.Core.Domain.Models; -using IRaCIS.Core.Domain.Share; +//using System; +//using System.Threading; +//using System.Threading.Tasks; +//using EntityFrameworkCore.Triggered; +//using IRaCIS.Core.Domain.Models; +//using IRaCIS.Core.Domain.Share; -namespace IRaCIS.Core.Application.Triggers -{ +//namespace IRaCIS.Core.Application.Triggers +//{ - public class SoftDeleteTrigger : IBeforeSaveTrigger - { - private readonly IUserInfo _userInfo; +// public class SoftDeleteTrigger : IBeforeSaveTrigger +// { +// private readonly IUserInfo _userInfo; - public SoftDeleteTrigger(IUserInfo userInfo) - { - _userInfo = userInfo; - } +// public SoftDeleteTrigger(IUserInfo userInfo) +// { +// _userInfo = userInfo; +// } - //Generator Detached 状态才会进去 误用 - //modelBuilder.Entity(entityType.ClrType).Property(nameof(ISoftDelete.DeletedTime)).HasValueGenerator().ValueGeneratedOnAddOrUpdate(); - public Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) - { - if (context.ChangeType == ChangeType.Modified) - { - if (context.Entity.IsDeleted) - { - context.Entity.DeleteUserId = _userInfo.Id; - context.Entity.DeletedTime = DateTime.UtcNow.AddHours(8); - } - else - { - context.Entity.DeletedTime = null; - } - } +// //Generator Detached 状态才会进去 误用 +// //modelBuilder.Entity(entityType.ClrType).Property(nameof(ISoftDelete.DeletedTime)).HasValueGenerator().ValueGeneratedOnAddOrUpdate(); +// public Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) +// { +// if (context.ChangeType == ChangeType.Modified) +// { +// if (context.Entity.IsDeleted) +// { +// context.Entity.DeleteUserId = _userInfo.Id; +// context.Entity.DeletedTime = DateTime.UtcNow.AddHours(8); +// } +// else +// { +// context.Entity.DeletedTime = null; +// } +// } - return Task.CompletedTask; +// return Task.CompletedTask; - } - } -} \ No newline at end of file +// } +// } +//} \ No newline at end of file