using IRaCIS.Core.Domain.Models; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace IRaCIS.Core.Infra.EFCore.EntityConfigration { public class SubjectConfigration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { //不能同时配置一对多 和一对一 但是有时表要存储多的最新的 比如受试者 最新的访视 在这里要显示配置 builder.HasOne(s => s.LatestSubjectVisit).WithMany().HasForeignKey(t => t.LatestSubjectVisitId); builder.HasOne(s => s.FinalSubjectVisit).WithMany().HasForeignKey(t => t.FinalSubjectVisitId); builder.HasMany(s => s.SubjectVisitList).WithOne(sv => sv.Subject).HasForeignKey(t => t.SubjectId); } } public class DictionaryConfigration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasOne(t => t.ConfigDictionary).WithMany().HasForeignKey(d => d.ConfigTypeId); //自身同时存在一对多 和一对一的关系,配置一对多的就可以,一对一 不用配置,有点奇怪 builder.HasMany(t => t.ChildList).WithOne(t => t.Parent).HasForeignKey(d => d.ParentId); } } public class NoneDicomStudyConfigration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder 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); } } public class SubjectUserConfigration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { //自身存在一对多的关系 //对于替换后的医生而言,关联多个之前的医生 builder.HasMany(t => t.EarlierSubjectUserList).WithOne(t => t.ReplacedSubjectUser).HasForeignKey(t => t.ReplacedSubjectUserId); } } public class UserConfigration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { //User 和VisitTask 存在一对多的关系 这里不显式配置就报错,why? builder.HasMany(t => t.VisitTaskList).WithOne(t => t.DoctorUser).HasForeignKey(t => t.DoctorUserId); //builder.HasOne(t => t.IdentityUser).WithMany(t => t.UserRoleList).HasForeignKey(t => t.IdentityUserId); } } public class TrialUserConfigration : IEntityTypeConfiguration { //当一个实体,针对同一个类,有两个一对一导航属性,但是是不同的外键,一个外键是一对一,一个是一对多,那么需要显示配置一对多的关系 public void Configure(EntityTypeBuilder builder) { //TrialUser 和User 之间 一对多 (一个用户可以参与多个项目) builder.HasOne(s => s.UserRole) .WithMany(t => t.UserRoleTrials) .HasForeignKey(s => s.UserId); //TrialUser User 一对一 创建人 } } //public class IdentityUserConfigration : IEntityTypeConfiguration //{ // //当一个实体,针对同一个类,有两个一对一导航属性,但是是不同的外键,一个外键是一对一,一个是一对多,那么需要显示配置一对多的关系 // public void Configure(EntityTypeBuilder builder) // { // builder.HasMany(s => s.UserRoleList) // .WithOne(t=>t.IdentityUser) // .HasForeignKey(s => s.IdentityUserId); // } //} public class TrialIdentityUserConfigration : IEntityTypeConfiguration { //当一个实体,针对同一个类,有两个一对一导航属性,但是是不同的外键,一个外键是一对一,一个是一对多,那么需要显示配置一对多的关系 public void Configure(EntityTypeBuilder builder) { builder.HasMany(s => s.TrialUserRoleList) .WithOne(t => t.TrialUser) .HasForeignKey(s => s.TrialUserId); } } }