修改仓储

Uat_Study
hang 2022-04-22 14:30:34 +08:00
parent 666671f090
commit 41de69d7e4
6 changed files with 159 additions and 16 deletions

View File

@ -10,6 +10,7 @@ using Microsoft.EntityFrameworkCore.ChangeTracking;
using System.Reflection; using System.Reflection;
using EntityFramework.Exceptions.SqlServer; using EntityFramework.Exceptions.SqlServer;
using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infra.EFCore.ValueGenerator;
using MassTransit; using MassTransit;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Metadata;
@ -99,12 +100,18 @@ namespace IRaCIS.Core.Infra.EFCore
if (typeof(ISoftDelete).IsAssignableFrom(entityType.ClrType)) if (typeof(ISoftDelete).IsAssignableFrom(entityType.ClrType))
{ {
entityType.AddSoftDeleteQueryFilter(); entityType.AddSoftDeleteQueryFilter();
//Generator Detached 状态才会进去 误用
//modelBuilder.Entity(entityType.ClrType).Property(nameof(ISoftDelete.DeletedTime)).HasValueGenerator<DeleteTimeGenerator>().ValueGeneratedOnAddOrUpdate();
} }
if (typeof(Entity).IsAssignableFrom(entityType.ClrType)) if (typeof(Entity).IsAssignableFrom(entityType.ClrType))
{ {
modelBuilder.Entity(entityType.ClrType).Property<Guid>(nameof(Entity.Id)).HasValueGenerator<MySequentialGuidValueGenerator>(); modelBuilder.Entity(entityType.ClrType).Property<Guid>(nameof(Entity.Id)).HasValueGenerator<MySequentialGuidValueGenerator>();
} }
} }
} }
@ -312,19 +319,24 @@ namespace IRaCIS.Core.Infra.EFCore
public virtual DbSet<CommonDocument> CommonDocument { get; set; } public virtual DbSet<CommonDocument> CommonDocument { get; set; }
public override int SaveChanges() #region 废弃
{
UpdateAuditInfo();
return base.SaveChanges();
}
public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()) //public override int SaveChanges()
{ //{
UpdateAuditInfo(); // UpdateAuditInfo();
return base.SaveChangesAsync(cancellationToken); // return base.SaveChanges();
} //}
#region 重写savechange方式 统一增加审计信息 CreateUserId CreateTime UpdateTime UpdateUserId 可用事件绑定的方式UpdateAuitUser //public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken())
//{
// UpdateAuditInfo();
// return base.SaveChangesAsync(cancellationToken);
//}
/// <summary>
/// 重写savechange方式 统一增加审计信息 CreateUserId CreateTime UpdateTime UpdateUserId 可用事件绑定的方式UpdateAuitUser
/// </summary>
private void UpdateAuditInfo() private void UpdateAuditInfo()
{ {
@ -343,6 +355,7 @@ namespace IRaCIS.Core.Infra.EFCore
break; break;
case EntityState.Modified: case EntityState.Modified:
if (t.Entity is IAuditUpdate updateEntity1) if (t.Entity is IAuditUpdate updateEntity1)
{ {
updateEntity1.UpdateTime = DateTime.UtcNow.AddHours(8); updateEntity1.UpdateTime = DateTime.UtcNow.AddHours(8);
@ -357,6 +370,7 @@ namespace IRaCIS.Core.Infra.EFCore
} }
} }
break; break;
//添加的时候,更新审计字段也赋值 //添加的时候,更新审计字段也赋值
case EntityState.Added: case EntityState.Added:
@ -396,10 +410,14 @@ namespace IRaCIS.Core.Infra.EFCore
} }
#endregion
#region 事件绑定的方式 更新审计信息
/// <summary>
/// 事件绑定的方式 更新审计信息 废弃
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void UpdateAuitUser(object sender, EntityEntryEventArgs e) private void UpdateAuitUser(object sender, EntityEntryEventArgs e)
{ {
if (e.Entry.Entity is IAuditUpdate updateEntity) if (e.Entry.Entity is IAuditUpdate updateEntity)
@ -450,8 +468,13 @@ namespace IRaCIS.Core.Infra.EFCore
} }
} }
#endregion #endregion
} }
public class MySequentialGuidValueGenerator : ValueGenerator<Guid> public class MySequentialGuidValueGenerator : ValueGenerator<Guid>

View File

@ -0,0 +1,55 @@
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<IAuditAdd>
{
private readonly IUserInfo _userInfo;
public AuditAddTrigger(IUserInfo userInfo)
{
_userInfo = userInfo;
}
public Task BeforeSave(ITriggerContext<IAuditAdd> context, CancellationToken cancellationToken)
{
if (context.ChangeType == ChangeType.Added)
{
context.Entity.CreateUserId = _userInfo.Id;
context.Entity.CreateTime = DateTime.UtcNow.AddHours(8);
}
return Task.CompletedTask;
}
}
public class AuditAddWithUsernameTrigger : IBeforeSaveTrigger<IAuditAddWithUserName>
{
private readonly IUserInfo _userInfo;
public AuditAddWithUsernameTrigger(IUserInfo userInfo)
{
_userInfo = userInfo;
}
public Task BeforeSave(ITriggerContext<IAuditAddWithUserName> context, CancellationToken cancellationToken)
{
if (context.ChangeType == ChangeType.Added)
{
context.Entity.CreateUserId = _userInfo.Id;
context.Entity.CreateUser = _userInfo.UserName;
context.Entity.CreateTime = DateTime.UtcNow.AddHours(8);
}
return Task.CompletedTask;
}
}
}

View File

@ -0,0 +1,33 @@
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<IAuditUpdate>
{
private readonly IUserInfo _userInfo;
public AuditUpdateTrigger(IUserInfo userInfo)
{
_userInfo = userInfo;
}
public Task BeforeSave(ITriggerContext<IAuditUpdate> context, CancellationToken cancellationToken)
{
if (context.ChangeType == ChangeType.Modified|| context.ChangeType == ChangeType.Added)
{
context.Entity.UpdateUserId = _userInfo.Id;
context.Entity.UpdateTime=DateTime.UtcNow.AddHours(8);
}
return Task.CompletedTask;
}
}
}

View File

@ -0,0 +1,31 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using EntityFrameworkCore.Triggered;
using IRaCIS.Core.Domain.Models;
namespace IRaCIS.Core.Application.Triggers
{
public class SoftDeleteTrigger : IBeforeSaveTrigger<ISoftDelete>
{
public Task BeforeSave(ITriggerContext<ISoftDelete> context, CancellationToken cancellationToken)
{
if (context.ChangeType == ChangeType.Modified)
{
if (context.Entity.IsDeleted)
{
context.Entity.DeletedTime=DateTime.UtcNow.AddHours(8);
}
else
{
context.Entity.DeletedTime = null;
}
}
return Task.CompletedTask;
}
}
}

View File

@ -1,12 +1,10 @@
using System; using System;
using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share;
using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.ChangeTracking;
using Microsoft.EntityFrameworkCore.ValueGeneration; using Microsoft.EntityFrameworkCore.ValueGeneration;
namespace IRaCIS.Core.Infra.EFCore.ValueGenerator namespace IRaCIS.Core.Infra.EFCore.ValueGenerator
{ {
/// <summary> /// <summary>
/// 上传监控 时间间隔存储 需要按照这个字段进行排序 /// 上传监控 时间间隔存储 需要按照这个字段进行排序
/// </summary> /// </summary>
@ -32,4 +30,5 @@ namespace IRaCIS.Core.Infra.EFCore.ValueGenerator
} }
public override bool GeneratesTemporaryValues => false; public override bool GeneratesTemporaryValues => false;
} }
} }

View File

@ -273,9 +273,11 @@ namespace IRaCIS.Core.Infra.EFCore
var bindings = ((MemberInitExpression)updateFactory.Body).Bindings.ToList(); var bindings = ((MemberInitExpression)updateFactory.Body).Bindings.ToList();
var hasPropNameList = bindings.Select(t => t.Member.Name).ToList();
if (typeof(IAuditUpdate).IsAssignableFrom(typeof(TEntity))) if (typeof(IAuditUpdate).IsAssignableFrom(typeof(TEntity)))
{ {
var hasPropNameList = bindings.Select(t => t.Member.Name).ToList();
if (!hasPropNameList.Contains(nameof(IAuditUpdate.UpdateTime))) if (!hasPropNameList.Contains(nameof(IAuditUpdate.UpdateTime)))
{ {