Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
c6d74309f4
|
@ -407,6 +407,12 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
//IR 上传的时候跟任务绑定
|
//IR 上传的时候跟任务绑定
|
||||||
public Guid? VisitTaskId { get; set; }
|
public Guid? VisitTaskId { get; set; }
|
||||||
|
|
||||||
|
public string RecordPath { get; set; }
|
||||||
|
|
||||||
|
public int FailedFileCount { get; set; }
|
||||||
|
|
||||||
|
public long FileSize { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public List<OSSFileDTO> UploadedFileList { get; set; } = new List<OSSFileDTO>();
|
public List<OSSFileDTO> UploadedFileList { get; set; } = new List<OSSFileDTO>();
|
||||||
|
|
||||||
|
@ -420,6 +426,14 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
public string FileType { get; set; }
|
public string FileType { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 非dicom 上传预上传接口
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="preArchiveStudyCommand"></param>
|
||||||
|
/// <param name="_studyService"></param>
|
||||||
|
/// <param name="_studyMonitorRepository"></param>
|
||||||
|
/// <returns></returns>
|
||||||
[HttpPost, Route("Study/PreArchiveStudy")]
|
[HttpPost, Route("Study/PreArchiveStudy")]
|
||||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||||
public async Task<IResponseOutput> PreArchiveStudy(PreArchiveStudyCommand preArchiveStudyCommand,
|
public async Task<IResponseOutput> PreArchiveStudy(PreArchiveStudyCommand preArchiveStudyCommand,
|
||||||
|
@ -437,6 +451,7 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
|
|
||||||
IsSuccess = false,
|
IsSuccess = false,
|
||||||
UploadStartTime = DateTime.Now,
|
UploadStartTime = DateTime.Now,
|
||||||
|
FileCount=preArchiveStudyCommand.FileCount,
|
||||||
IsDicom = preArchiveStudyCommand.IsDicom,
|
IsDicom = preArchiveStudyCommand.IsDicom,
|
||||||
IP = _userInfo.IP
|
IP = _userInfo.IP
|
||||||
};
|
};
|
||||||
|
@ -500,7 +515,9 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
|
|
||||||
noneDicomStudy.FileCount = noneDicomStudy.FileCount + (incommand.VisitTaskId != null ? 0 : incommand.UploadedFileList.Count);
|
noneDicomStudy.FileCount = noneDicomStudy.FileCount + (incommand.VisitTaskId != null ? 0 : incommand.UploadedFileList.Count);
|
||||||
|
|
||||||
studyMonitor.FileCount = incommand.UploadedFileList.Count;
|
studyMonitor.RecordPath = incommand.RecordPath;
|
||||||
|
studyMonitor.FailedFileCount = incommand.FailedFileCount;
|
||||||
|
studyMonitor.IsSuccess = incommand.FailedFileCount == 0;
|
||||||
studyMonitor.FileSize = incommand.UploadedFileList.Sum(t => t.FileFize);
|
studyMonitor.FileSize = incommand.UploadedFileList.Sum(t => t.FileFize);
|
||||||
studyMonitor.IsDicom = false;
|
studyMonitor.IsDicom = false;
|
||||||
studyMonitor.IsDicomReUpload = false;
|
studyMonitor.IsDicomReUpload = false;
|
||||||
|
@ -508,7 +525,6 @@ namespace IRaCIS.Core.API.Controllers
|
||||||
studyMonitor.StudyCode = noneDicomStudy.StudyCode;
|
studyMonitor.StudyCode = noneDicomStudy.StudyCode;
|
||||||
studyMonitor.ArchiveFinishedTime = DateTime.Now;
|
studyMonitor.ArchiveFinishedTime = DateTime.Now;
|
||||||
studyMonitor.IP = _userInfo.IP;
|
studyMonitor.IP = _userInfo.IP;
|
||||||
studyMonitor.IsSuccess = true;
|
|
||||||
|
|
||||||
await _noneDicomStudyRepository.SaveChangesAsync();
|
await _noneDicomStudyRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
|
|
@ -281,6 +281,15 @@
|
||||||
<member name="M:IRaCIS.Core.API.Controllers.StudyController.ArchiveStudyNew(System.Guid,System.Guid,System.String,System.Nullable{System.Guid},System.Guid,Microsoft.Extensions.Logging.ILogger{IRaCIS.Core.API.Controllers.UploadDownLoadController},IRaCIS.Core.Application.Contracts.IStudyService,Microsoft.AspNetCore.SignalR.IHubContext{IRaCIS.Core.API.UploadHub,IRaCIS.Core.API.IUploadClient},IRaCIS.Core.Application.Contracts.Dicom.IDicomArchiveService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.StudyMonitor})">
|
<member name="M:IRaCIS.Core.API.Controllers.StudyController.ArchiveStudyNew(System.Guid,System.Guid,System.String,System.Nullable{System.Guid},System.Guid,Microsoft.Extensions.Logging.ILogger{IRaCIS.Core.API.Controllers.UploadDownLoadController},IRaCIS.Core.Application.Contracts.IStudyService,Microsoft.AspNetCore.SignalR.IHubContext{IRaCIS.Core.API.UploadHub,IRaCIS.Core.API.IUploadClient},IRaCIS.Core.Application.Contracts.Dicom.IDicomArchiveService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.StudyMonitor})">
|
||||||
<summary>Dicom 归档</summary>
|
<summary>Dicom 归档</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:IRaCIS.Core.API.Controllers.StudyController.PreArchiveStudy(IRaCIS.Core.Application.Contracts.PreArchiveStudyCommand,IRaCIS.Core.Application.Contracts.IStudyService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.StudyMonitor})">
|
||||||
|
<summary>
|
||||||
|
非dicom 上传预上传接口
|
||||||
|
</summary>
|
||||||
|
<param name="preArchiveStudyCommand"></param>
|
||||||
|
<param name="_studyService"></param>
|
||||||
|
<param name="_studyMonitorRepository"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadNoneDicomFile(IRaCIS.Core.API.Controllers.StudyController.UploadNoneDicomFileCommand,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.StudyMonitor},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudyFile})">
|
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadNoneDicomFile(IRaCIS.Core.API.Controllers.StudyController.UploadNoneDicomFileCommand,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.StudyMonitor},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudyFile})">
|
||||||
<summary>
|
<summary>
|
||||||
上传非Dicom 文件 支持压缩包 多文件上传
|
上传非Dicom 文件 支持压缩包 多文件上传
|
||||||
|
|
|
@ -4263,7 +4263,7 @@
|
||||||
临床答案
|
临床答案
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.ClinicalAnswerService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialClinicalQuestion},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SystemClinicalQuestion},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SystemClinicalTableQuestion},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialClinicalTableQuestion},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ClinicalDataTrialSet},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ClinicalForm},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Subject},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadModuleCriterionFrom},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadModule},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ClinicalQuestionAnswer},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ClinicalTableAnswer},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ClinicalAnswerRowInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingClinicalData},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Application.Interfaces.IClinicalQuestionService,IRaCIS.Core.Application.Contracts.IReadingClinicalDataService)">
|
<member name="M:IRaCIS.Core.Application.Service.ClinicalAnswerService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialClinicalQuestion},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialClinicalTableQuestion},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ClinicalDataTrialSet},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ClinicalForm},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Subject},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadModuleCriterionFrom},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadModule},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ClinicalQuestionAnswer},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ClinicalTableAnswer},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ClinicalAnswerRowInfo},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingClinicalData},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Application.Interfaces.IClinicalQuestionService,IRaCIS.Core.Application.Contracts.IReadingClinicalDataService)">
|
||||||
<summary>
|
<summary>
|
||||||
临床答案
|
临床答案
|
||||||
</summary>
|
</summary>
|
||||||
|
|
|
@ -207,9 +207,6 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[NotDefault]
|
[NotDefault]
|
||||||
public Guid SubjectVisitId { get; set; }
|
public Guid SubjectVisitId { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public long FileSize { get; set; }
|
|
||||||
|
|
||||||
public bool IsDicomReUpload { get; set; }
|
public bool IsDicomReUpload { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
@ -390,7 +387,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public string HtmlPath { get; set; } = string.Empty;
|
public string HtmlPath { get; set; } = string.Empty;
|
||||||
|
|
||||||
public decimal FileFize { get; set; }
|
public long FileSize { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CRCUploadTaskQuery
|
public class CRCUploadTaskQuery
|
||||||
|
@ -582,6 +579,8 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public string IP { get; set; }
|
public string IP { get; set; }
|
||||||
|
|
||||||
|
public UserTypeEnum UserTypeEnum { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TrialIamgeDownQuery:PageInput
|
public class TrialIamgeDownQuery:PageInput
|
||||||
|
|
|
@ -90,7 +90,6 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
IP = _userInfo.IP,
|
IP = _userInfo.IP,
|
||||||
|
|
||||||
IsDicomReUpload = preArchiveStudyCommand.IsDicomReUpload,
|
IsDicomReUpload = preArchiveStudyCommand.IsDicomReUpload,
|
||||||
FileSize = preArchiveStudyCommand.FileSize,
|
|
||||||
FileCount = preArchiveStudyCommand.FileCount,
|
FileCount = preArchiveStudyCommand.FileCount,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -165,6 +164,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
studyMonitor.FailedFileCount = incommand.FailedFileCount;
|
studyMonitor.FailedFileCount = incommand.FailedFileCount;
|
||||||
studyMonitor.IsSuccess = incommand.FailedFileCount == 0;
|
studyMonitor.IsSuccess = incommand.FailedFileCount == 0;
|
||||||
studyMonitor.RecordPath = incommand.RecordPath;
|
studyMonitor.RecordPath = incommand.RecordPath;
|
||||||
|
studyMonitor.FileSize = incommand.Study.SeriesList.SelectMany(t=>t.InstanceList).Sum(t => t.FileSize);
|
||||||
|
|
||||||
var studyId = IdentifierHelper.CreateGuid(incommand.Study.StudyInstanceUid, incommand.TrialId.ToString());
|
var studyId = IdentifierHelper.CreateGuid(incommand.Study.StudyInstanceUid, incommand.TrialId.ToString());
|
||||||
var findStudy = await _dicomstudyRepository.FirstOrDefaultAsync(t => t.Id == studyId);
|
var findStudy = await _dicomstudyRepository.FirstOrDefaultAsync(t => t.Id == studyId);
|
||||||
|
|
|
@ -145,6 +145,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
CreateMap<TrialImageDownload, TrialImageDownloadView>()
|
CreateMap<TrialImageDownload, TrialImageDownloadView>()
|
||||||
.ForMember(d => d.UserFullName, u => u.MapFrom(s => s.CreateUser.FullName))
|
.ForMember(d => d.UserFullName, u => u.MapFrom(s => s.CreateUser.FullName))
|
||||||
|
.ForMember(d => d.UserTypeEnum, u => u.MapFrom(s => s.CreateUser.UserTypeEnum))
|
||||||
.ForMember(d => d.UserName, u => u.MapFrom(s => s.CreateUser.UserName));
|
.ForMember(d => d.UserName, u => u.MapFrom(s => s.CreateUser.UserName));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,6 @@ namespace IRaCIS.Core.Application.Service
|
||||||
[ApiExplorerSettings(GroupName = "Reading")]
|
[ApiExplorerSettings(GroupName = "Reading")]
|
||||||
public class ClinicalAnswerService(
|
public class ClinicalAnswerService(
|
||||||
IRepository<TrialClinicalQuestion> _trialClinicalQuestionRepository,
|
IRepository<TrialClinicalQuestion> _trialClinicalQuestionRepository,
|
||||||
IRepository<SystemClinicalQuestion> _systemClinicalQuestionRepository,
|
|
||||||
IRepository<SystemClinicalTableQuestion> _systemClinicalTableQuestionRepository,
|
|
||||||
IRepository<TrialClinicalTableQuestion> _trialClinicalTableQuestionRepository,
|
IRepository<TrialClinicalTableQuestion> _trialClinicalTableQuestionRepository,
|
||||||
IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository,
|
IRepository<ClinicalDataTrialSet> _clinicalDataTrialSetRepository,
|
||||||
IRepository<ClinicalForm> _clinicalFormRepository,
|
IRepository<ClinicalForm> _clinicalFormRepository,
|
||||||
|
|
|
@ -42,13 +42,16 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(d => d.SystemClinicalQuestionId, opt => opt.MapFrom(src => src.Id));
|
.ForMember(d => d.SystemClinicalQuestionId, opt => opt.MapFrom(src => src.Id));
|
||||||
|
|
||||||
CreateMap<SystemClinicalQuestion, TrialClinicalQuestionSynchronize>()
|
CreateMap<SystemClinicalQuestion, TrialClinicalQuestionSynchronize>()
|
||||||
|
.ForMember(d => d.CreateUser, opt => opt.Ignore())
|
||||||
.ForMember(d => d.SystemClinicalQuestionId, opt => opt.MapFrom(src => src.Id));
|
.ForMember(d => d.SystemClinicalQuestionId, opt => opt.MapFrom(src => src.Id));
|
||||||
|
|
||||||
|
|
||||||
CreateMap<SystemClinicalTableQuestion, TrialClinicalTableQuestion>()
|
CreateMap<SystemClinicalTableQuestion, TrialClinicalTableQuestion>()
|
||||||
.ForMember(d => d.SystemTableQuestionId, u => u.MapFrom(s => s.Id));
|
.ForMember(d => d.SystemTableQuestionId, u => u.MapFrom(s => s.Id));
|
||||||
|
|
||||||
CreateMap<SystemClinicalTableQuestion, TrialClinicalTableQuestionSynchronize>()
|
CreateMap<SystemClinicalTableQuestion, TrialClinicalTableQuestionSynchronize>()
|
||||||
.ForMember(d => d.SystemTableQuestionId, opt => opt.MapFrom(src => src.Id));
|
.ForMember(d => d.SystemTableQuestionId, opt => opt.MapFrom(src => src.Id))
|
||||||
|
.ForMember(d => d.CreateUser, opt => opt.Ignore());
|
||||||
|
|
||||||
|
|
||||||
// 预览
|
// 预览
|
||||||
|
@ -207,7 +210,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
CreateMap<ReadingCriterionPageAddOrEdit, ReadingCriterionPage>();
|
CreateMap<ReadingCriterionPageAddOrEdit, ReadingCriterionPage>();
|
||||||
|
|
||||||
CreateMap<ReadingQuestionTrial, ReadingQuestionSystem>();
|
CreateMap<ReadingQuestionTrial, ReadingQuestionSystem>()
|
||||||
|
.ForMember(d => d.CreateUser, u => u.Ignore());
|
||||||
|
|
||||||
CreateMap<Dictionary, OrganDictionary>();
|
CreateMap<Dictionary, OrganDictionary>();
|
||||||
|
|
||||||
|
@ -218,6 +222,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(d => d.OriginalId, u => u.MapFrom(s => s.Id));
|
.ForMember(d => d.OriginalId, u => u.MapFrom(s => s.Id));
|
||||||
|
|
||||||
CreateMap<ReadingQuestionSystem, ReadingQuestionTrial>()
|
CreateMap<ReadingQuestionSystem, ReadingQuestionTrial>()
|
||||||
|
.ForMember(d => d.CreateUser, u => u.Ignore())
|
||||||
.ForMember(d => d.ReadingQuestionSystemId, u => u.MapFrom(s => s.Id));
|
.ForMember(d => d.ReadingQuestionSystemId, u => u.MapFrom(s => s.Id));
|
||||||
|
|
||||||
CreateMap<ReadingTableAnswerRowInfo, TableAnsweRowInfo>()
|
CreateMap<ReadingTableAnswerRowInfo, TableAnsweRowInfo>()
|
||||||
|
@ -239,7 +244,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
CreateMap<ReadingQuestionCriterionSystem, ReadingQuestionCriterionTrial>()
|
CreateMap<ReadingQuestionCriterionSystem, ReadingQuestionCriterionTrial>()
|
||||||
.ForMember(dest => dest.ReadingQuestionTrialList, opt => opt.Ignore())
|
.ForMember(dest => dest.ReadingQuestionTrialList, opt => opt.Ignore())
|
||||||
.ForMember(d => d.ReadingQuestionCriterionSystemId, u => u.MapFrom(s => s.Id)); ;
|
.ForMember(dest => dest.CreateUser, opt => opt.Ignore())
|
||||||
|
.ForMember(d => d.ReadingQuestionCriterionSystemId, u => u.MapFrom(s => s.Id));
|
||||||
|
|
||||||
|
|
||||||
CreateMap<AddOrUpdateReadingQuestionCriterionSystemInDto, ReadingQuestionCriterionSystem>();
|
CreateMap<AddOrUpdateReadingQuestionCriterionSystemInDto, ReadingQuestionCriterionSystem>();
|
||||||
|
|
|
@ -281,6 +281,8 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public bool IsDicom { get; set; }
|
public bool IsDicom { get; set; }
|
||||||
|
|
||||||
|
public int FileCount { get; set; }
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -116,14 +116,12 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public IResponseOutput TestJson()
|
public async Task<IResponseOutput> TestJson()
|
||||||
{
|
{
|
||||||
var trial=new Trial();
|
|
||||||
|
|
||||||
trial.ExperimentName = null;
|
await _trialBodyPartRepository.FirstOrDefaultAsync();
|
||||||
|
|
||||||
_trialRepository.AddAsync(trial,true);
|
|
||||||
|
|
||||||
|
await _trialBodyPartRepository.Where(t=>t.Trial.Id==Guid.Empty).FirstOrDefaultAsync();
|
||||||
|
|
||||||
return ResponseOutput.Ok(new TestModel(), IRCEmailPasswordHelper.GenerateRandomPassword(10));
|
return ResponseOutput.Ok(new TestModel(), IRCEmailPasswordHelper.GenerateRandomPassword(10));
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,7 +71,7 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
[ForeignKey("CreateUserId")]
|
[ForeignKey("CreateUserId")]
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public User CreateUser { get; set; }
|
public virtual User CreateUser { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract class BaseAddDeleteAuditEntity : Entity, IAuditAdd, ISoftDelete
|
public abstract class BaseAddDeleteAuditEntity : Entity, IAuditAdd, ISoftDelete
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations.Operations;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace IRaCIS.Core.Test.CodeFirstTest.MSSQL.Convention
|
|
||||||
{
|
|
||||||
public class MigrationRemoveForeignKeysSqlGenerator : MigrationsSqlGenerator
|
|
||||||
{
|
|
||||||
public MigrationRemoveForeignKeysSqlGenerator(MigrationsSqlGeneratorDependencies dependencies, IMigrationsAnnotationProvider migrationsAnnotations) : base(dependencies)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Generate(Microsoft.EntityFrameworkCore.Migrations.Operations.CreateTableOperation operation, IModel? model, MigrationCommandListBuilder builder, bool terminate = true)
|
|
||||||
{
|
|
||||||
operation.ForeignKeys.Clear();
|
|
||||||
base.Generate(operation, model, builder, terminate);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Generate(AddForeignKeyOperation operation, IModel? model, MigrationCommandListBuilder builder,
|
|
||||||
bool terminate = true)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata.Conventions;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
namespace IRaCIS.Core.Test
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 这种方式不行
|
||||||
|
/// </summary>
|
||||||
|
public class NoForeignKeyConvention : IModelFinalizingConvention
|
||||||
|
{
|
||||||
|
public void ProcessModelFinalizing(IConventionModelBuilder modelBuilder, IConventionContext<IConventionModelBuilder> context)
|
||||||
|
{
|
||||||
|
foreach (var entityType in modelBuilder.Metadata.GetEntityTypes())
|
||||||
|
{
|
||||||
|
foreach (var foreignKey in entityType.GetForeignKeys())
|
||||||
|
{
|
||||||
|
// 设置删除行为为 NoAction,避免生成外键约束
|
||||||
|
foreignKey.Builder.OnDelete(DeleteBehavior.NoAction);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations.Operations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations.Internal;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage;
|
||||||
|
|
||||||
|
namespace IRaCIS.Core.Test
|
||||||
|
{
|
||||||
|
public class NoForeignKeyMigrationsSqlGenerator : MigrationsSqlGenerator
|
||||||
|
{
|
||||||
|
public NoForeignKeyMigrationsSqlGenerator(
|
||||||
|
MigrationsSqlGeneratorDependencies dependencies) : base(dependencies)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Generate(MigrationOperation operation, IModel model, MigrationCommandListBuilder builder)
|
||||||
|
{
|
||||||
|
if (operation is AddForeignKeyOperation || operation is DropForeignKeyOperation)
|
||||||
|
{
|
||||||
|
// 跳过外键的生成
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
base.Generate(operation, model, builder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -3,7 +3,6 @@ using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using IRaCIS.Core.Test.CodeFirstTest.MSSQL;
|
using IRaCIS.Core.Test.CodeFirstTest.MSSQL;
|
||||||
using IRaCIS.Core.Test.CodeFirstTest.MSSQL.Convention;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
@ -42,8 +41,9 @@ public partial class IRCContext : DbContext
|
||||||
|
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
{
|
{
|
||||||
//移除外键约束
|
|
||||||
optionsBuilder.ReplaceService<IMigrationsSqlGenerator, MigrationRemoveForeignKeysSqlGenerator>();
|
// 替换默认的 MigrationsSqlGenerator
|
||||||
|
optionsBuilder.ReplaceService<IMigrationsSqlGenerator, NoForeignKeyMigrationsSqlGenerator>();
|
||||||
optionsBuilder.UseSqlServer("Server=106.14.89.110,1433;Database=IRC_Code;User ID=sa;Password=mssql_KnTs2a;TrustServerCertificate=true");
|
optionsBuilder.UseSqlServer("Server=106.14.89.110,1433;Database=IRC_Code;User ID=sa;Password=mssql_KnTs2a;TrustServerCertificate=true");
|
||||||
|
|
||||||
|
|
||||||
|
@ -65,6 +65,8 @@ public partial class IRCContext : DbContext
|
||||||
}
|
}
|
||||||
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
|
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
//针对字符串使用默认的长度配置
|
//针对字符串使用默认的长度配置
|
||||||
configurationBuilder.Conventions.Add(_ => new MaxStringLengthConvention());
|
configurationBuilder.Conventions.Add(_ => new MaxStringLengthConvention());
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
namespace IRaCIS.Core.Test.CodeFirstTest.MSSQL.Migrations
|
namespace IRaCIS.Core.Test.CodeFirstTest.MSSQL.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(IRCContext))]
|
[DbContext(typeof(IRCContext))]
|
||||||
[Migration("20240912012757_RemoveForeignKey")]
|
[Migration("20240912054434_RemoveForeignKey")]
|
||||||
partial class RemoveForeignKey
|
partial class RemoveForeignKey
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
|
@ -151,6 +151,8 @@ namespace IRaCIS.Core.Test.CodeFirstTest.MSSQL
|
||||||
#region 测试生成迁移移除外键约束
|
#region 测试生成迁移移除外键约束
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region 测试迁移不生成外键约束,ef知道外键关系,但是数据库不保存外键
|
||||||
public class Project : BaseFullAuditEntity
|
public class Project : BaseFullAuditEntity
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -163,4 +165,7 @@ namespace IRaCIS.Core.Test.CodeFirstTest.MSSQL
|
||||||
|
|
||||||
public Project Project { get; set; }
|
public Project Project { get; set; }
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue