using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share.AuthUser; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using System; using System.Linq; using System.Threading; using System.Threading.Tasks; using IRaCIS.Core.Domain; //using System.Data.Entity; //using IRaCIS.Infra.Data.Mapping; namespace IRaCIS.Core.Infra.EFCore { public class IRaCISDBContext : DbContext { private readonly IUserInfo _userInfo; ///记录控制台日志: ///1. Microsoft.Extensions.Logging ///Microsoft.Extensions.Logging.Console ///2. 定义日志工厂 ///3. OnConfiguring配置使用日志工厂 /// /// 指定静态ILoggerFactory /// //在控制台 //public static readonly ILoggerFactory MyLoggerFactory // = LoggerFactory.Create(builder => { builder.AddConsole(); }); //调试窗口 public static readonly ILoggerFactory MyLoggerFactory = LoggerFactory.Create(builder => { builder.AddDebug(); }); public IRaCISDBContext(DbContextOptions options, IUserInfo userInfo) : base(options) { _userInfo = userInfo; Console.WriteLine("This is IRaCISDBContext DbContextOptions"); } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseLoggerFactory(MyLoggerFactory); } public virtual DbSet Dictionary { get; set; } public virtual DbSet Doctor { get; set; } public virtual DbSet DoctorDictionary { get; set; } public virtual DbSet Attachment { get; set; } public virtual DbSet DoctorWorkload { get; set; } public virtual DbSet EnrollDetails { get; set; } public virtual DbSet Postgraduate { get; set; } public virtual DbSet ProjectDictionary { get; set; } public virtual DbSet Trial { get; set; } public virtual DbSet TrialDetail { get; set; } public virtual DbSet TrialExperience { get; set; } public virtual DbSet Education { get; set; } public virtual DbSet IntoGroup { get; set; } public virtual DbSet ResearchPublications { get; set; } public virtual DbSet SysMessages { get; set; } public virtual DbSet MenuFunctions { get; set; } public virtual DbSet Roles { get; set; } public virtual DbSet RoleMenus { get; set; } public virtual DbSet Users { get; set; } public virtual DbSet UserRoles { get; set; } public virtual DbSet ResearchCenter { get; set; } public virtual DbSet UserDoctor { get; set; } public virtual DbSet UserTrial { get; set; } public virtual DbSet Hospitals { get; set; } public virtual DbSet CROCompany { get; set; } public virtual DbSet Sponsor { get; set; } public virtual DbSet Vacation { get; set; } public virtual DbSet ReviewerPayInformation { get; set; } public virtual DbSet RankPrice { get; set; } public virtual DbSet TrialPaymentPrice { get; set; } public virtual DbSet AwardPrice { get; set; } public virtual DbSet Payment { get; set; } public virtual DbSet PaymentDetail { get; set; } public virtual DbSet ExchangeRate { get; set; } public virtual DbSet ImageAcquisitionSpecification { get; set; } public virtual DbSet ClinicalStudySubjects { get; set; } public virtual DbSet VisitPlans { get; set; } public virtual DbSet DicomStudys { get; set; } public virtual DbSet DicomSeries { get; set; } public virtual DbSet DicomInstances { get; set; } public virtual DbSet StudyStatusDetails { get; set; } //public virtual DbSet Images { get; set; } public virtual DbSet TrialRevenuesPrice { get; set; } public virtual DbSet PaymentAdjustment { get; set; } public virtual DbSet SystemLogs { get; set; } public virtual DbSet VerificationCodes { get; set; } public virtual DbSet TrialRevenuesPriceVerification { get; set; } public virtual DbSet Test { get; set; } #region QA public virtual DbSet QADictionary { get; set; } public virtual DbSet QATemplate { get; set; } public virtual DbSet QADialog { get; set; } public virtual DbSet QATemplateDictionary { get; set; } public virtual DbSet QARecord { get; set; } public virtual DbSet SubjectVisit { get; set; } #endregion public virtual DbSet StudyReviewer { get; set; } #region 工作量分配 public virtual DbSet WorkloadTPs { get; set; } public virtual DbSet WorkloadGlobals { get; set; } public virtual DbSet WorkloadADs { get; set; } public virtual DbSet WorkloadDetails { get; set; } #endregion public virtual DbSet TU { get; set; } public virtual DbSet TR { get; set; } public virtual DbSet RS { get; set; } public virtual DbSet Reports { get; set; } public virtual DbSet GlobalRS { get; set; } public virtual DbSet GlobalResult { get; set; } public virtual DbSet ImageLabels { get; set; } public virtual DbSet KeyInstances { get; set; } public override int SaveChanges() { ChangeTracker.DetectChanges(); // Important! var addList = ChangeTracker.Entries().Where(p => p.State == EntityState.Added).Select(t => t.Entity).ToList(); var updateList = ChangeTracker.Entries().Where(p => p.State == EntityState.Modified).Select(t => t.Entity).ToList(); try { foreach (var entity in addList) { if (entity is IAuditAdd baseEntity) { baseEntity.CreateTime = DateTime.Now; baseEntity.CreateUserId = _userInfo.Id; } if (entity is IAuditUpdate updateEntity) { updateEntity.UpdateTime = DateTime.Now; updateEntity.UpdateUserId = _userInfo.Id; } } foreach (var entity in updateList) { if (entity is IAuditUpdate baseEntity) { baseEntity.UpdateTime = DateTime.Now; baseEntity.UpdateUserId = _userInfo.Id; } } } catch (Exception e) { Console.WriteLine(e); throw; } return base.SaveChanges(); } public override Task SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()) { ChangeTracker.DetectChanges(); // Important! var addList = ChangeTracker.Entries().Where(p => p.State == EntityState.Added).Select(t => t.Entity).ToList(); var updateList = ChangeTracker.Entries().Where(p => p.State == EntityState.Modified).Select(t => t.Entity).ToList(); try { foreach (var entity in addList) { if (entity is IAuditAdd baseEntity) { baseEntity.CreateTime = DateTime.Now; baseEntity.CreateUserId = _userInfo.Id; } if (entity is IAuditUpdate updateEntity) { updateEntity.UpdateTime = DateTime.Now; updateEntity.UpdateUserId = _userInfo.Id; } } foreach (var entity in updateList) { if (entity is IAuditUpdate baseEntity) { baseEntity.UpdateTime = DateTime.Now; baseEntity.UpdateUserId = _userInfo.Id; } } } catch (Exception e) { Console.WriteLine(e); throw; } return base.SaveChangesAsync(cancellationToken); } } }