清理、整理代码
continuous-integration/drone/push Build is passing

This commit is contained in:
hang
2024-08-29 22:32:08 +08:00
parent a340167bfb
commit 7dc40fbc5c
16 changed files with 312 additions and 414 deletions
@@ -25,6 +25,7 @@ using System.Reflection.Metadata;
namespace IRaCIS.Core.Infra.EFCore
{
#region
/// <summary>
/// 报错,添加subject 报错,重复添加访视
/// </summary>
@@ -47,6 +48,8 @@ namespace IRaCIS.Core.Infra.EFCore
// return context;
// }
//}
#endregion
public class IRaCISDBContext : DbContext
{
@@ -72,42 +75,7 @@ namespace IRaCIS.Core.Infra.EFCore
builder.HasNoKey();
});
modelBuilder.Entity<NoneDicomStudy>().HasMany(t => t.NoneDicomFileList).WithOne(s => s.NoneDicomStudy).HasForeignKey(t => t.NoneDicomStudyId);
modelBuilder.Entity<NoneDicomStudy>().HasMany(t => t.TaskNoneDicomFileList).WithOne(s => s.OriginNoneDicomStudy).HasForeignKey(t => t.OriginNoneDicomStudyId);
modelBuilder.Entity<ReadingQuestionTrial>().HasQueryFilter(p => p.IsAdditional == false);
modelBuilder.Entity<User>().HasMany(t => t.VisitTaskList).WithOne(t => t.DoctorUser).HasForeignKey(t => t.DoctorUserId).IsRequired(false);
//modelBuilder.Entity<TaskMedicalReviewRule>().HasMany(t => t.DoctorTrialVisitTaskList).WithOne(t => t.DoctorTaskMedicalReviewRule).HasForeignKey(t => new { t.DoctorUserId, t.TrialId }).HasPrincipalKey(u => new { u.DoctorUserId, u.TrialId });
//modelBuilder.Entity<TaskMedicalReviewRule>().HasMany(t => t.TaskMedicalReviewList).WithOne(t => t.TaskMedicalReviewRule).HasForeignKey(t => new { t.DoctorUserId, t.TrialId }).HasPrincipalKey(u => new { u.DoctorUserId, u.TrialId });
//会导致级联删除
//modelBuilder.Entity<SubjectUser>().HasMany(t => t.SubjectArmVisitTaskList).WithOne(t => t.SujectArm).HasForeignKey(t => new { t.SubjectId, t.ArmEnum }).HasPrincipalKey(u => new { u.SubjectId, u.ArmEnum })
// ./*IsRequired(false)*/OnDelete(DeleteBehavior.NoAction);
// modelBuilder.Entity<VisitTask>().HasOne(t => t.SujectArm).WithMany(s => s.SubjectArmVisitTaskList).HasForeignKey(t => new { t.SubjectId, t.ArmEnum }).HasPrincipalKey(u => new { u.SubjectId, u.ArmEnum });
modelBuilder.Entity<VisitTask>().HasMany(t => t.JudgeVisitList).WithOne(t => t.JudgeVisitTask);
modelBuilder.Entity<VisitTask>().HasMany(t => t.TaskMedicalReviewList).WithOne(t => t.VisitTask).HasForeignKey(t => t.VisitTaskId);
modelBuilder.Entity<VisitTask>().HasOne(t => t.Subject).WithMany(s => s.SubjectVisitTaskList).HasForeignKey(t => t.SubjectId);
modelBuilder.Entity<VisitTask>().HasMany(t => t.TaskInfluenceList).WithOne(s => s.OriginalTask).HasForeignKey(t => t.OriginalTaskId);
modelBuilder.Entity<VisitTask>().HasMany(t => t.GlobalVisitResultList).WithOne(s => s.GlobalVisitTask).HasForeignKey(t => t.GlobalTaskId);
modelBuilder.Entity<Dictionary>().HasMany(t => t.ChildList).WithOne(t => t.Parent);
modelBuilder.Entity<SubjectUser>().HasMany(t => t.EarlierSubjectUserList).WithOne(t => t.OrignalSubjectUser);
modelBuilder.Entity<VisitTask>().HasQueryFilter(b => b.Subject.IsDeleted == false);
//遍历实体模型手动配置
var typesToRegister = Assembly.GetExecutingAssembly().GetTypes().Where(q => q.GetInterface(typeof(IEntityTypeConfiguration<>).FullName) != null);
foreach (var type in typesToRegister)
@@ -138,7 +106,7 @@ namespace IRaCIS.Core.Infra.EFCore
}
#region
#region
public IQueryable<TableList> GetTableList()
{
return Set<TableList>().FromSqlRaw("EXEC dbo.procGetTableList");
@@ -150,6 +118,92 @@ namespace IRaCIS.Core.Infra.EFCore
}
#endregion
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken())
{
// 采用触发器的方式 设置 CreateUserId CreateTime UpdateTime UpdateUserId 稽查实体里面没有这四个字段的值 因为先后顺序的原因
await AddAudit();
try
{
return await base.SaveChangesAsync(cancellationToken);
}
catch (UniqueConstraintException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("该唯一键已经存在于数据库中。");
}
catch (TimeoutException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("数据库操作已经超时,请稍后重试。");
}
catch (CannotInsertNullException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("无法在非空列上插入空值。");
}
catch (MaxLengthExceededException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("字符串超过了数据库列的最大长度。");
}
catch (NumericOverflowException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("数值超过了数据类型的范围。");
}
catch (SyntaxErrorException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("SQL 查询中存在语法错误。");
}
catch (ReferenceConstraintException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("无法进行当前操作,当前数据不符合外键约束。");
}
catch (DbUpdateConcurrencyException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("SQL 事务失败,请检查环境。");
}
}
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; }
public virtual DbSet<Doctor> Doctor { get; set; }
@@ -400,8 +454,6 @@ namespace IRaCIS.Core.Infra.EFCore
#endregion
#region Document
public virtual DbSet<SystemDocument> SystemDocument { get; set; }
public virtual DbSet<TrialDocument> TrialDocument { get; set; }
@@ -414,41 +466,7 @@ namespace IRaCIS.Core.Infra.EFCore
public virtual DbSet<TrialDocConfirmedUser> TrialDocConfirmedUser { get; set; }
#endregion
#region
#region
//public virtual DbSet<WorkloadTP> WorkloadTPs { get; set; }
//public virtual DbSet<WorkloadGlobal> WorkloadGlobals { get; set; }
//public virtual DbSet<WorkloadAD> WorkloadADs { get; set; }
//public virtual DbSet<WorkloadDetail> WorkloadDetails { get; set; }
#endregion
//public virtual DbSet<Message> SysMessages { get; set; }
//public virtual DbSet<TrialAttachment> TrialAttachment { get; set; }
//public virtual DbSet<SystemLog> SystemLogs { get; set; }
//public virtual DbSet<TU> TU { get; set; }
//public virtual DbSet<TR> TR { get; set; }
//public virtual DbSet<RS> RS { get; set; }
//public virtual DbSet<Report> Reports { get; set; }
//public virtual DbSet<StudyReviewer> StudyReviewer { get; set; }
//public virtual DbSet<KeyInstance> KeyInstances { get; set; }
//public virtual DbSet<GlobalRS> GlobalRS { get; set; }
//public virtual DbSet<GlobalResult> GlobalResult { get; set; }
//public virtual DbSet<ImageLabel> ImageLabels { get; set; }
//public virtual DbSet<QATemplateItem> QaTemplateItem { get; set; }
//public virtual DbSet<QATemplateItemDictionary> QaTemplateItemDictionary { get; set; }
//public virtual DbSet<QATemplateTemplateItem> QaTemplateTemplateItem { get; set; }
//public virtual DbSet<QATrialTemplate> QATrailTemplate { get; set; }
//public virtual DbSet<QATrialTemplateItem> QATrialTemplateItem { get; set; }
//public virtual DbSet<QAAboutTrialTemplateItem> QARecordTrialTemplateItem { get; set; }
//public virtual DbSet<QARecordTemplateItemDetail> QARecordTemplateItemDetail { get; set; }
//public virtual DbSet<QATemplate> QATemplate { get; set; }
//public virtual DbSet<QANoticeUser> QANoticeUser { get; set; }
//public virtual DbSet<QANotice> QANotice { get; set; }
//public virtual DbSet<TrialUserPreparation> TrialUserPreparation { get; set; }
#endregion
#region
public virtual DbSet<ShortcutKey> ShortcutKey { get; set; }
@@ -509,96 +527,6 @@ namespace IRaCIS.Core.Infra.EFCore
public virtual DbSet<UserFeedBack> UserFeedBack { get; set; }
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken())
{
// 采用触发器的方式 设置 CreateUserId CreateTime UpdateTime UpdateUserId 稽查实体里面没有这四个字段的值 因为先后顺序的原因
await AddAudit();
try
{
return await base.SaveChangesAsync(cancellationToken);
}
catch (UniqueConstraintException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("该唯一键已经存在于数据库中。");
}
catch (TimeoutException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("数据库操作已经超时,请稍后重试。");
}
catch (CannotInsertNullException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("无法在非空列上插入空值。");
}
catch (MaxLengthExceededException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("字符串超过了数据库列的最大长度。");
}
catch (NumericOverflowException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("数值超过了数据类型的范围。");
}
catch (SyntaxErrorException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("SQL 查询中存在语法错误。");
}
catch (ReferenceConstraintException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("无法进行当前操作,当前数据不符合外键约束。");
}
catch (DbUpdateConcurrencyException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("SQL 事务失败,请检查环境。");
}
}
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);
}
}
public virtual DbSet<TaskAllocationRule> TaskAllocationRule { get; set; }
public virtual DbSet<VisitTask> VisitTask { get; set; }
@@ -627,15 +555,9 @@ namespace IRaCIS.Core.Infra.EFCore
public virtual DbSet<TrialVirtualSiteCodeUpdate> TrialVirtualSiteCodeUpdate { get; set; }
public virtual DbSet<EnrollReadingCriterion> EnrollReadingCriterion { get; set; }
#endregion
}
public class MySequentialGuidValueGenerator : ValueGenerator<Guid>
{
public override Guid Next(EntityEntry entry)
{
return NewId.NextGuid();
}
public override bool GeneratesTemporaryValues => false;
}
}
@@ -1,66 +0,0 @@
//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;
// if (context.Entity.CreateTime == default(DateTime))
// {
// context.Entity.CreateTime = DateTime.Now;
// }
// }
// 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;
// if (context.Entity.CreateTime == default(DateTime))
// {
// context.Entity.CreateTime = DateTime.Now;
// }
// }
// return Task.CompletedTask;
// }
// }
//}
@@ -1,33 +0,0 @@
//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.UpdateTime = DateTime.Now;
// context.Entity.UpdateUserId = _userInfo.Id;
// }
// return Task.CompletedTask;
// }
// }
//}
@@ -1,41 +0,0 @@
//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 SoftDeleteTrigger : IBeforeSaveTrigger<ISoftDelete>
// {
// private readonly IUserInfo _userInfo;
// public SoftDeleteTrigger(IUserInfo userInfo)
// {
// _userInfo = userInfo;
// }
// //Generator Detached 状态才会进去 误用
// //modelBuilder.Entity(entityType.ClrType).Property(nameof(ISoftDelete.DeletedTime)).HasValueGenerator<DeleteTimeGenerator>().ValueGeneratedOnAddOrUpdate();
// public Task BeforeSave(ITriggerContext<ISoftDelete> context, CancellationToken cancellationToken)
// {
// if (context.ChangeType == ChangeType.Modified)
// {
// if (context.Entity.IsDeleted)
// {
// context.Entity.DeleteUserId = _userInfo.Id;
// context.Entity.DeletedTime = DateTime.Now;
// }
// else
// {
// context.Entity.DeletedTime = null;
// }
// }
// return Task.CompletedTask;
// }
// }
//}
@@ -0,0 +1,18 @@
using System;
using IRaCIS.Core.Domain.Models;
using MassTransit;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using Microsoft.EntityFrameworkCore.ValueGeneration;
namespace IRaCIS.Core.Infra.EFCore
{
public class MySequentialGuidValueGenerator : ValueGenerator<Guid>
{
public override Guid Next(EntityEntry entry)
{
return NewId.NextGuid();
}
public override bool GeneratesTemporaryValues => false;
}
}
@@ -1,34 +0,0 @@
//using System;
//using IRaCIS.Core.Domain.Models;
//using Microsoft.EntityFrameworkCore.ChangeTracking;
//using Microsoft.EntityFrameworkCore.ValueGeneration;
//namespace IRaCIS.Core.Infra.EFCore.ValueGenerator
//{
// /// <summary>
// /// 上传监控 时间间隔存储 需要按照这个字段进行排序
// /// </summary>
// public class UploadTotalMillisecondsInterval : ValueGenerator<int>
// {
// //code first must migration dbfirst must config in db and also need config in code
// //modelBuilder.Entity<StudyMonitor>().Property(e => e.TotalMillisecondsInterval).HasComputedColumnSql("datediff(MS,UploadStartTime,UploadFinishedTime)");
// //modelBuilder.Entity<StudyMonitor>().Property(e => e.TestInterval).ValueGeneratedOnAddOrUpdate().HasDefaultValueSql("datediff(MS,UploadStartTime,UploadFinishedTime)");
// public override int Next(EntityEntry entry)
// {
// if (entry.Entity is StudyMonitor entity)
// {
// return (entity.UploadFinishedTime - entity.UploadStartTime)?.Milliseconds;
// }
// else
// {
// throw new ArgumentException("ValueGenerator用在了不适合的实体");
// }
// }
// public override bool GeneratesTemporaryValues => false;
// }
//}
@@ -0,0 +1,24 @@
using IRaCIS.Core.Domain.Models;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
{
public class DictionaryConfigration : IEntityTypeConfiguration<Dictionary>
{
public void Configure(EntityTypeBuilder<Dictionary> builder)
{
builder.HasMany(t => t.ChildList).WithOne(t => t.Parent);
}
}
}
@@ -2,6 +2,7 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System.Reflection.Emit;
namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
@@ -28,16 +29,5 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
public class DictionaryConfigration : IEntityTypeConfiguration<Dictionary>
{
public void Configure(EntityTypeBuilder<Dictionary> builder)
{
//builder.Property(e => e.MappedValue).Metadata.SetBeforeSaveBehavior(PropertySaveBehavior.Ignore);
// builder.Property(e => e.MappedValue).Metadata.SetAfterSaveBehavior(PropertySaveBehavior.Ignore);
}
}
}
@@ -1,6 +1,7 @@
using IRaCIS.Core.Domain.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System.Reflection.Emit;
namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
@@ -12,7 +13,8 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
public void Configure(EntityTypeBuilder<NoneDicomStudy> builder)
{
builder.HasMany(t => t.NoneDicomFileList).WithOne(s => s.NoneDicomStudy).HasForeignKey(t => t.NoneDicomStudyId);
builder.HasMany(t => t.TaskNoneDicomFileList).WithOne(s => s.OriginNoneDicomStudy).HasForeignKey(t => t.OriginNoneDicomStudyId);
}
}
}
@@ -1,18 +0,0 @@
using IRaCIS.Core.Domain.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
{
public class ReadingPeriodSiteConfigration : IEntityTypeConfiguration<ReadingPeriodSite>
{
public void Configure(EntityTypeBuilder<ReadingPeriodSite> builder)
{
}
}
}
@@ -0,0 +1,25 @@
using IRaCIS.Core.Domain.Models;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
{
public class ReadingQuestionTrialConfigration : IEntityTypeConfiguration<ReadingQuestionTrial>
{
public void Configure(EntityTypeBuilder<ReadingQuestionTrial> builder)
{
builder.HasQueryFilter(p => p.IsAdditional == false);
}
}
}
@@ -1,19 +0,0 @@
using IRaCIS.Core.Domain.Models;
//using IRaCIS.Core.Infra.EFCore.ValueGenerator;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
{
public class StudyMonitorConfigration : IEntityTypeConfiguration<StudyMonitor>
{
public void Configure(EntityTypeBuilder<StudyMonitor> builder)
{
}
}
}
@@ -20,4 +20,15 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
}
}
public class UserConfigration : IEntityTypeConfiguration<User>
{
public void Configure(EntityTypeBuilder<User> builder)
{
builder.HasMany(t => t.VisitTaskList).WithOne(t => t.DoctorUser).HasForeignKey(t => t.DoctorUserId).IsRequired(false);
}
}
}
@@ -0,0 +1,57 @@
using IRaCIS.Core.Domain.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System.Reflection.Emit;
namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
{
public class VisitTaskConfigration : IEntityTypeConfiguration<VisitTask>
{
public void Configure(EntityTypeBuilder<VisitTask> builder)
{
builder.HasMany(t => t.JudgeVisitList).WithOne(t => t.JudgeVisitTask);
builder.HasMany(t => t.TaskMedicalReviewList).WithOne(t => t.VisitTask).HasForeignKey(t => t.VisitTaskId);
builder.HasOne(t => t.Subject).WithMany(s => s.SubjectVisitTaskList).HasForeignKey(t => t.SubjectId);
builder.HasMany(t => t.TaskInfluenceList).WithOne(s => s.OriginalTask).HasForeignKey(t => t.OriginalTaskId);
builder.HasMany(t => t.GlobalVisitResultList).WithOne(s => s.GlobalVisitTask).HasForeignKey(t => t.GlobalTaskId);
builder.HasQueryFilter(b => b.Subject.IsDeleted == false);
//modelBuilder.Entity<TaskMedicalReviewRule>().HasMany(t => t.DoctorTrialVisitTaskList).WithOne(t => t.DoctorTaskMedicalReviewRule).HasForeignKey(t => new { t.DoctorUserId, t.TrialId }).HasPrincipalKey(u => new { u.DoctorUserId, u.TrialId });
//modelBuilder.Entity<TaskMedicalReviewRule>().HasMany(t => t.TaskMedicalReviewList).WithOne(t => t.TaskMedicalReviewRule).HasForeignKey(t => new { t.DoctorUserId, t.TrialId }).HasPrincipalKey(u => new { u.DoctorUserId, u.TrialId });
//会导致级联删除
//modelBuilder.Entity<SubjectUser>().HasMany(t => t.SubjectArmVisitTaskList).WithOne(t => t.SujectArm).HasForeignKey(t => new { t.SubjectId, t.ArmEnum }).HasPrincipalKey(u => new { u.SubjectId, u.ArmEnum })
// ./*IsRequired(false)*/OnDelete(DeleteBehavior.NoAction);
// builder.HasOne(t => t.SujectArm).WithMany(s => s.SubjectArmVisitTaskList).HasForeignKey(t => new { t.SubjectId, t.ArmEnum }).HasPrincipalKey(u => new { u.SubjectId, u.ArmEnum });
}
}
public class SubjectUserConfigration : IEntityTypeConfiguration<SubjectUser>
{
public void Configure(EntityTypeBuilder<SubjectUser> builder)
{
builder.HasMany(t => t.EarlierSubjectUserList).WithOne(t => t.OrignalSubjectUser);
}
}
}