irc-netcore-api/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs

537 lines
21 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using IRaCIS.Core.Domain.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using System.Reflection;
using EntityFramework.Exceptions.SqlServer;
using IRaCIS.Core.Domain.Share;
using MassTransit;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.ValueGeneration;
using UserTypeGroup = IRaCIS.Core.Domain.Models.UserTypeGroup;
using IRaCIS.Core.Infra.EFCore.Common;
using IRaCIS.Core.Infra.EFCore.Common.Dto;
using Microsoft.Identity.Client;
using EntityFramework.Exceptions.Common;
using System.Data;
using IRaCIS.Core.Infrastructure;
using System.Reflection.Metadata;
using System.Collections.Generic;
using System.ComponentModel;
using Microsoft.VisualBasic;
namespace IRaCIS.Core.Infra.EFCore
{
#region 连接池废弃
/// <summary>
/// 报错添加subject 报错,重复添加访视
/// </summary>
//public class IRaCISDBScopedFactory : IDbContextFactory<IRaCISDBContext>
//{
// private readonly IDbContextFactory<IRaCISDBContext> _pooledFactory;
// private readonly IUserInfo _userInfo;
// public IRaCISDBScopedFactory(IDbContextFactory<IRaCISDBContext> pooledFactory,IUserInfo userInfo)
// {
// _pooledFactory = pooledFactory;
// _userInfo = userInfo;
// }
// public IRaCISDBContext CreateDbContext()
// {
// var context = _pooledFactory.CreateDbContext();
// context._userInfo = _userInfo;
// return context;
// }
//}
#endregion
public class IRaCISDBContext : DbContext
{
public IRaCISDBContext(DbContextOptions<IRaCISDBContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
#region pgsql codefirst 配置 暂时屏蔽
//if (base.Database.IsNpgsql())
//{
// modelBuilder.HasPostgresExtension("uuid-ossp");
// //保证pgsql 生成的时间默认为timestamp 而不是 timestamp with time zone
// foreach (var entityType in modelBuilder.Model.GetEntityTypes())
// {
// foreach (var property in entityType.GetProperties())
// {
// if (property.ClrType == typeof(DateTime) || property.ClrType == typeof(DateTime?))
// {
// property.SetColumnType("timestamp without time zone");
// }
// }
// }
//}
#endregion
//遍历实体模型手动配置
var typesToRegister = Assembly.GetExecutingAssembly().GetTypes().Where(q => q.GetInterface(typeof(IEntityTypeConfiguration<>).FullName) != null);
foreach (var type in typesToRegister)
{
dynamic configurationInstance = Activator.CreateInstance(type);
modelBuilder.ApplyConfiguration(configurationInstance);
}
base.OnModelCreating(modelBuilder);
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
// 软删除配置
if (typeof(ISoftDelete).IsAssignableFrom(entityType.ClrType))
{
entityType.AddSoftDeleteQueryFilter();
}
if (typeof(Entity).IsAssignableFrom(entityType.ClrType))
{
modelBuilder.Entity(entityType.ClrType).Property<Guid>(nameof(Entity.Id)).HasValueGenerator<MySequentialGuidValueGenerator>();
}
if (typeof(IEntitySeqId).IsAssignableFrom(entityType.ClrType))
{
modelBuilder.Entity(entityType.ClrType).Property<Guid>(nameof(IEntitySeqId.SeqId)).HasValueGenerator<MySequentialGuidValueGenerator>();
}
}
}
#region 获取表名 和字段名 优化
/// <summary>
/// 直接获取代码定义的模型以及表上定义的Description 获取表信息 以及备注
/// </summary>
/// <returns></returns>
public List<TableList> GetContextTablesList()
{
var tableList = new List<TableList>();
foreach (var entityType in this.Model.GetEntityTypes())
{
var clrType = entityType.ClrType;
var tableName = entityType.GetTableName();
var tableDescription = clrType.GetCustomAttribute<DescriptionAttribute>()?.Description ?? string.Empty;
tableList.Add(new TableList
{
Name = tableName,
Remake = tableDescription,
});
}
return tableList;
}
/// <summary>
/// 直接获取代码定义的某个表的属性以及属性上定义的Description 获取备注
/// </summary>
/// <returns></returns>
public List<TableList> GetContextTableColumnList(string tableName)
{
var tableColumList = new List<TableList>();
var entityType = this.Model.GetEntityTypes().FirstOrDefault(t => t.GetTableName().ToLower() == tableName.ToLower());
if (entityType == null)
{
throw new ArgumentException($"Table '{tableName}' not found.");
}
var clrType = entityType.ClrType;
foreach (var property in entityType.GetProperties())
{
var columnName = property.GetColumnName();
var columnDescription = clrType.GetProperty(property.Name)?.GetCustomAttribute<DescriptionAttribute>()?.Description ?? string.Empty;
tableColumList.Add(new TableList
{
Name = columnName,
Remake = columnDescription,
});
}
return tableColumList.OrderBy(t => t.Name).ToList();
}
#endregion
#region Doctor
public virtual DbSet<Dictionary> Dictionary { get; set; }
public virtual DbSet<Doctor> Doctor { get; set; }
public virtual DbSet<DoctorCriterionFile> DoctorCriterionFile { get; set; }
public virtual DbSet<DoctorDictionary> DoctorDictionary { get; set; }
public virtual DbSet<Postgraduate> Postgraduate { get; set; }
public virtual DbSet<Education> Education { get; set; }
public virtual DbSet<ResearchPublication> ResearchPublications { get; set; }
public virtual DbSet<TrialExperience> TrialExperience { get; set; }
public virtual DbSet<UserDoctor> UserDoctor { get; set; }
public virtual DbSet<Vacation> Vacation { get; set; }
public virtual DbSet<Attachment> Attachment { get; set; }
public virtual DbSet<TrialExperienceCriteria> TrialExperienceCriteria { get; set; }
#endregion
#region Enroll
public virtual DbSet<Workload> DoctorWorkload { get; set; }
public virtual DbSet<Enroll> Enroll { get; set; }
public virtual DbSet<EnrollReadingCategory> EnrollReadingCategory { get; set; }
public virtual DbSet<EnrollDetail> EnrollDetails { get; set; }
#endregion
#region Reading
public virtual DbSet<TrialCriterionDictionaryCode> TrialCriterionDictionaryCode { get; set; }
public virtual DbSet<ReadingCustomTag> ReadingCustomTag { get; set; }
public virtual DbSet<SystemCriterionDictionaryCode> SystemCriterionDictionaryCode { get; set; }
public virtual DbSet<ReadingTaskRelation> ReadingTaskRelation { get; set; }
public virtual DbSet<OrganInfo> OrganInfo { get; set; }
public virtual DbSet<ReadingSystemCriterionDictionary> ReadingSystemCriterionDictionary { get; set; }
public virtual DbSet<ReadingTableAnswerRowInfo> ReadingTableAnswerRowInfo { get; set; }
public virtual DbSet<OrganTrialInfo> OrganTrialInfo { get; set; }
public virtual DbSet<ReadingTableQuestionSystem> ReadingTableQuestionSystem { get; set; }
public virtual DbSet<ReadingPeriodSet> ReadingPeriodSet { get; set; }
public virtual DbSet<ReadingTaskQuestionAnswer> ReadingTaskQuestionAnswer { get; set; }
public virtual DbSet<ReadingPeriodPlan> ReadingPeriodPlan { get; set; }
public virtual DbSet<ReadingClinicalData> ReadingClinicalData { get; set; }
public virtual DbSet<ReadingOncologyTaskInfo> ReadingOncologyTaskInfo { get; set; }
public virtual DbSet<ReadingGlobalTaskInfo> ReadingGlobalTaskInfo { get; set; }
public virtual DbSet<ReadingQuestionCriterionSystem> ReadingQuestionCriterionSystem { get; set; }
public virtual DbSet<ReadingQuestionCriterionTrial> ReadingQuestionCriterionTrial { get; set; }
public virtual DbSet<ReadingQuestionSystem> ReadingQuestionSystem { get; set; }
public virtual DbSet<ReadingQuestionTrial> ReadingQuestionTrial { get; set; }
public virtual DbSet<ReadingClinicalDataPDF> ReadingClinicalDataPDF { get; set; }
public virtual DbSet<ReadingConsistentClinicalData> ReadingConsistentClinicalData { get; set; }
public virtual DbSet<ReadingConsistentClinicalDataPDF> ReadingConsistentClinicalDataPDF { get; set; }
public virtual DbSet<ReadingJudgeInfo> ReadingJudgeInfo { get; set; }
public virtual DbSet<ReadModule> ReadModule { get; set; }
public virtual DbSet<ReadModuleView> ReadModuleView { get; set; }
public virtual DbSet<ClinicalDataTrialSet> ClinicalDataTrialSet { get; set; }
public virtual DbSet<ClinicalDataSystemSet> ClinicalDataSystemSet { get; set; }
public virtual DbSet<ReadingMedicineSystemQuestion> ReadingMedicineSystemQuestion { get; set; }
public virtual DbSet<ReadingMedicineTrialQuestion> ReadingMedicineTrialQuestion { get; set; }
public virtual DbSet<ReadingMedicineQuestionAnswer> ReadingMedicineQuestionAnswer { get; set; }
public virtual DbSet<ReadingMedicalReviewDialog> ReadingMedicalReviewDialog { get; set; }
public virtual DbSet<CriterionNidusSystem> CriterionNidusSystem { get; set; }
public virtual DbSet<CriterionNidusTrial> CriterionNidusTrial { get; set; }
public virtual DbSet<ReadingTrialCriterionDictionary> ReadingTrialCriterionDictionary { get; set; }
public virtual DbSet<ReadingTableQuestionTrial> ReadingTableQuestionTrial { get; set; }
public virtual DbSet<TumorAssessment_RECIST1Point1BM> TumorAssessment_RECIST1Point1BM { get; set; }
public virtual DbSet<TumorAssessment_RECIST1Point1> TumorAssessment_RECIST1Point1 { get; set; }
public virtual DbSet<TumorAssessment_IRECIST1Point1> TumorAssessment_IRECIST1Point1 { get; set; }
public virtual DbSet<TrialClinicalDataSetCriterion> TrialClinicalDataSetCriterion { get; set; }
public virtual DbSet<TrialCriterionAdditionalAssessmentType> TrialCriterionAdditionalAssessmentType { get; set; }
public virtual DbSet<SubjectCriteriaEvaluation> SubjectCriteriaEvaluation { get; set; }
public virtual DbSet<SubjectAdditionalEvaluationResult> SubjectAdditionalEvaluationResult { get; set; }
public virtual DbSet<SubjectCriteriaEvaluationVisitFilter> SubjectCriteriaEvaluationVisitFilter { get; set; }
public virtual DbSet<SubjectCriteriaEvaluationVisitStudyFilter> SubjectCriteriaEvaluationVisitStudyFilter { get; set; }
public virtual DbSet<ReadingTaskQuestionMark> ReadingTaskQuestionMark { get; set; }
//public virtual DbSet<TrialClinicalDataCriterion> TrialClinicalDataCriterion { get; set; }
//public virtual DbSet<SystemClinicalDataCriterion> SystemClinicalDataCriterion { get; set; }
#endregion
#region Subject and Visit and study
public virtual DbSet<StudyMonitor> StudyMonitor { get; set; }
public virtual DbSet<Subject> Subject { get; set; }
public virtual DbSet<VisitStage> VisitPlans { get; set; }
public virtual DbSet<VisitPlanInfluenceStudy> VisitPlanInfluenceStudy { get; set; }
public virtual DbSet<VisitPlanInfluenceStat> VisitPlanInfluenceStat { get; set; }
public virtual DbSet<NoneDicomStudyFile> NoneDicomStudyFile { get; set; }
public virtual DbSet<NoneDicomStudy> NoneDicomStudy { get; set; }
public virtual DbSet<PreviousPDF> PreviousPDF { get; set; }
public virtual DbSet<PreviousSurgery> PreviousSurgery { get; set; }
public virtual DbSet<PreviousOther> PreviousOther { get; set; }
public virtual DbSet<PreviousHistory> PreviousHistory { get; set; }
public virtual DbSet<DicomStudy> DicomStudys { get; set; }
public virtual DbSet<DicomSeries> DicomSeries { get; set; }
public virtual DbSet<DicomInstance> DicomInstances { get; set; }
public virtual DbSet<ImageShare> ImageShare { get; set; }
#endregion
#region Management
public virtual DbSet<VerificationCode> VerificationCodes { get; set; }
public virtual DbSet<Menu> MenuFunctions { get; set; }
public virtual DbSet<Role> Roles { get; set; }
public virtual DbSet<UserTypeMenu> UserTypeMenuFunction { get; set; }
public virtual DbSet<User> Users { get; set; }
public virtual DbSet<TrialAudit> TrialAudit { get; set; }
public virtual DbSet<UserType> UserType { get; set; }
#endregion
#region Institution
public virtual DbSet<Hospital> Hospitals { get; set; }
public virtual DbSet<CRO> CROCompany { get; set; }
public virtual DbSet<Sponsor> Sponsor { get; set; }
#endregion
#region Trial
public virtual DbSet<Trial> Trial { get; set; }
public virtual DbSet<TrialDictionary> TrialDictionary { get; set; }
public virtual DbSet<TrialStatusDetail> TrialDetail { get; set; }
public virtual DbSet<TrialUser> UserTrial { get; set; }
public virtual DbSet<TrialDictionary> ProjectDictionary { get; set; }
public virtual DbSet<TrialSiteUser> UserTrialSite { get; set; }
public virtual DbSet<TrialSite> TrialSite { get; set; }
public virtual DbSet<Site> Site { get; set; }
public virtual DbSet<User> User { get; set; }
public virtual DbSet<UserPassWordLog> UserPassWordLog { get; set; }
public virtual DbSet<TrialSiteUserSurvey> TrialSiteUserSurvey { get; set; }
public virtual DbSet<TrialSiteEquipmentSurvey> TrialSiteEquipmentSurvey { get; set; }
public virtual DbSet<TrialSiteSurvey> TrialSiteSurvey { get; set; }
#endregion
#region Financial
public virtual DbSet<ReviewerPayInformation> ReviewerPayInformation { get; set; }
public virtual DbSet<RankPrice> RankPrice { get; set; }
public virtual DbSet<TrialPaymentPrice> TrialPaymentPrice { get; set; }
public virtual DbSet<VolumeReward> AwardPrice { get; set; }
public virtual DbSet<Payment> Payment { get; set; }
public virtual DbSet<PaymentDetail> PaymentDetail { get; set; }
public virtual DbSet<ExchangeRate> ExchangeRate { get; set; }
public virtual DbSet<TrialRevenuesPrice> TrialRevenuesPrice { get; set; }
public virtual DbSet<PaymentAdjustment> PaymentAdjustment { get; set; }
public virtual DbSet<TrialRevenuesPriceVerification> TrialRevenuesPriceVerification { get; set; }
#endregion
#region QC
public virtual DbSet<TrialQCQuestion> TrialQCQuestionConfigure { get; set; }
public virtual DbSet<QCQuestion> QCQuestionConfigure { get; set; }
public virtual DbSet<TrialQCQuestionAnswer> TrialQCQuestionAnswer { get; set; }
public virtual DbSet<CheckChallengeDialog> CheckChallengeDialog { get; set; }
#endregion
#region QA
public virtual DbSet<QCChallengeDialog> QCChallengeDialog { get; set; }
//public virtual DbSet<QANotice> QATemplateDictionary { get; set; }
public virtual DbSet<QCChallenge> QCChallenge { get; set; }
public virtual DbSet<SubjectVisit> SubjectVisit { get; set; }
#endregion
#region ClinicalQuestion
public virtual DbSet<TrialClinicalQuestion> TrialClinicalQuestion { get; set; }
public virtual DbSet<SystemClinicalQuestion> SystemClinicalQuestion { get; set; }
public virtual DbSet<SystemClinicalTableQuestion> SystemClinicalTableQuestion { get; set; }
public virtual DbSet<TrialClinicalTableQuestion> TrialClinicalTableQuestion { get; set; }
public virtual DbSet<ClinicalQuestionAnswer> ClinicalQuestionAnswer { get; set; }
public virtual DbSet<ClinicalAnswerRowInfo> ClinicalAnswerRowInfo { get; set; }
public virtual DbSet<ClinicalTableAnswer> ClinicalTableAnswer { get; set; }
public virtual DbSet<ReadModuleCriterionFrom> ReadModuleCriterionFrom { get; set; }
public virtual DbSet<ClinicalForm> ClinicalForm { get; set; }
#endregion
#region Document
public virtual DbSet<SystemDocument> SystemDocument { get; set; }
public virtual DbSet<TrialDocument> TrialDocument { get; set; }
public virtual DbSet<TrialDocNeedConfirmedUserType> TrialDocUserTypeConfirm { get; set; }
public virtual DbSet<SystemDocConfirmedUser> SystemDocConfirmedUser { get; set; }
public virtual DbSet<SystemDocNeedConfirmedUserType> SystemDocNeedConfirmedUserType { get; set; }
public virtual DbSet<TrialDocNeedConfirmedUserType> TrialDocNeedConfirmedUserType { get; set; }
public virtual DbSet<TrialDocConfirmedUser> TrialDocConfirmedUser { get; set; }
#endregion
#region 未分类
public virtual DbSet<ShortcutKey> ShortcutKey { get; set; }
public virtual DbSet<UserWLTemplate> UserWLTemplate { get; set; }
public virtual DbSet<EmailNoticeConfig> EmailNoticeConfig { get; set; }
public virtual DbSet<SystemBasicData> SystemBasicData { get; set; }
public virtual DbSet<TrialSign> TrialSign { get; set; }
public virtual DbSet<TrialStateChange> TrialStateChange { get; set; }
public virtual DbSet<SystemAnonymization> SystemAnonymization { get; set; }
public virtual DbSet<TrialExternalUser> TrialExternalUser { get; set; }
public virtual DbSet<UserTypeGroup> UserTypeGroup { get; set; }
public virtual DbSet<DataInspection> DataInspection { get; set; }
public virtual DbSet<FrontAuditConfig> FrontAuditConfig { get; set; }
public virtual DbSet<InspectionFile> InspectionFile { get; set; }
public virtual DbSet<CommonDocument> CommonDocument { get; set; }
public virtual DbSet<SystemNotice> SystemNotice { get; set; }
public virtual DbSet<SystemNoticeUserRead> SystemNoticeUserRead { get; set; }
public virtual DbSet<SystemNoticeUserType> SystemNoticeUserType { get; set; }
public virtual DbSet<ReadingTableQuestionAnswer> ReadingTableQuestionAnswer { get; set; }
public virtual DbSet<PublishLog> PublishLog { get; set; }
public virtual DbSet<UserLog> UserLog { get; set; }
public virtual DbSet<EmailNoticeUserType> EmailNoticeUserType { get; set; }
public virtual DbSet<TrialEmailBlackUser> TrialEmailBlackUser { get; set; }
public virtual DbSet<TrialBodyPart> TrialBodyPart { get; set; }
public virtual DbSet<ExploreRecommend> ExploreRecommend { get; set; }
public virtual DbSet<SCPPatient> SCPPatient { get; set; }
public virtual DbSet<SCPStudy> SCPStudy { get; set; }
public virtual DbSet<SCPSeries> SCPSeries { get; set; }
public virtual DbSet<SCPInstance> SCPInstance { get; set; }
public virtual DbSet<TrialDicomAE> TrialDicomAE { get; set; }
public virtual DbSet<TrialSiteDicomAE> TrialSiteDicomAE { get; set; }
public virtual DbSet<SCPImageUpload> SCPImageUpload { get; set; }
public virtual DbSet<UserFeedBack> UserFeedBack { get; set; }
public virtual DbSet<TaskAllocationRule> TaskAllocationRule { get; set; }
public virtual DbSet<VisitTask> VisitTask { get; set; }
public virtual DbSet<SubjectUser> SubjectUser { get; set; }
public virtual DbSet<VisitTaskReReading> VisitTaskReReading { get; set; }
public virtual DbSet<TaskMedicalReview> TaskMedicalReview { get; set; }
public virtual DbSet<TaskMedicalReviewRule> TaskMedicalReviewRule { get; set; }
public virtual DbSet<TaskConsistentRule> TaskConsistentRule { get; set; }
public virtual DbSet<TaskInfluence> TaskInfluence { get; set; }
public virtual DbSet<SubjectCanceDoctor> SubjectCanceDoctor { get; set; }
public virtual DbSet<TrialEmailNoticeConfig> TrialEmailNoticeConfig { get; set; }
public virtual DbSet<TrialEmailNoticeUser> TrialEmailNoticeUser { get; set; }
public virtual DbSet<Internationalization> Internationalization { get; set; }
public virtual DbSet<TrialVirtualSiteCodeUpdate> TrialVirtualSiteCodeUpdate { get; set; }
public virtual DbSet<EnrollReadingCriterion> EnrollReadingCriterion { get; set; }
#endregion
public virtual DbSet<TrialImageDownload> TrialImageDownload { get; set; }
}
}