This commit is contained in:
@@ -1,56 +0,0 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using IRaCIS.Core.Domain.Models;
|
||||
|
||||
namespace IRaCIS.Core.Infra.EFCore
|
||||
{
|
||||
#region AuditContext
|
||||
public class AuditContext : DbContext
|
||||
{
|
||||
//传递委托进来写日志
|
||||
|
||||
private readonly string _connectionString;
|
||||
|
||||
public AuditContext(string connectionString)
|
||||
{
|
||||
_connectionString = connectionString;
|
||||
}
|
||||
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||
=> optionsBuilder.UseSqlServer(_connectionString);
|
||||
|
||||
public DbSet<SaveChangesAudit> SaveChangesAudits { get; set; }
|
||||
}
|
||||
|
||||
public class SaveChangesAudit
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
//public Guid AuditId { get; set; }
|
||||
public DateTime StartTime { get; set; }
|
||||
public DateTime EndTime { get; set; }
|
||||
public bool Succeeded { get; set; } = false;
|
||||
public string ErrorMessage { get; set; } = string.Empty;
|
||||
|
||||
public ICollection<EntityAudit> Entities { get; } = new List<EntityAudit>();
|
||||
}
|
||||
|
||||
public class EntityAudit: IAuditAddWithUserName
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public Guid AlterId { get; set; }=Guid.Empty;
|
||||
public Guid SaveChangesAuditId { get; set; }
|
||||
public EntityState State { get; set; }
|
||||
public string AuditMessage { get; set; }
|
||||
|
||||
|
||||
|
||||
|
||||
public SaveChangesAudit SaveChangesAudit { get; set; }
|
||||
|
||||
public string CreateUser { get; set; } = string.Empty;
|
||||
public Guid CreateUserId { get; set; }=Guid.Empty;
|
||||
public DateTime CreateTime { get; set; }=DateTime.Now;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
@@ -162,9 +162,7 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||
|
||||
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken())
|
||||
{
|
||||
// 采用触发器的方式 设置 CreateUserId CreateTime UpdateTime UpdateUserId 稽查实体里面没有这四个字段的值 因为先后顺序的原因
|
||||
await AddAudit();
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
return await base.SaveChangesAsync(cancellationToken);
|
||||
@@ -222,28 +220,7 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||
}
|
||||
|
||||
|
||||
public async Task AddAudit()
|
||||
{
|
||||
|
||||
//触发器里面提交事务 业务方法里面提交事务 会记录两次
|
||||
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))
|
||||
.ToList();
|
||||
AuditingData auditingData = new AuditingData(this, _userInfo);
|
||||
|
||||
//await auditingData.IncomingEntitys(entities);
|
||||
|
||||
|
||||
if (entities.Count > 0)
|
||||
{
|
||||
await auditingData.InsertAddEntitys(entities);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
#region Doctor
|
||||
public virtual DbSet<Dictionary> Dictionary { get; set; }
|
||||
@@ -399,7 +376,6 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||
public virtual DbSet<TrialAudit> TrialAudit { get; set; }
|
||||
public virtual DbSet<UserType> UserType { get; set; }
|
||||
|
||||
public virtual DbSet<SaveChangesAudit> SaveChangesAudits { get; set; }
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user