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);
}
}
}