修改仓储
parent
666671f090
commit
41de69d7e4
|
@ -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>
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -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)))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue