diff --git a/IRaCIS.Core.Application/Service/SiteSurvey/_MapConfig.cs b/IRaCIS.Core.Application/Service/SiteSurvey/_MapConfig.cs index 99ab33b6e..4338226e7 100644 --- a/IRaCIS.Core.Application/Service/SiteSurvey/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/SiteSurvey/_MapConfig.cs @@ -41,7 +41,7 @@ namespace IRaCIS.Core.Application.AutoMapper CreateMap() .ForMember(d => d.Sponsor, u => u.MapFrom(s => s.Sponsor.SponsorName)) .ForMember(d => d.IndicationType, u => u.MapFrom(s => s.IndicationType.Value)) - .ForMember(d => d.TrialSiteSelectList, u => u.MapFrom(s => s.TrialSiteList)) + .ForMember(d => d.TrialSiteSelectList, u => u.MapFrom(s => s.TrialSiteList.Where(t=>t.TrialSiteCode.Length>0))) .ForMember(d => d.TrialId, u => u.MapFrom(s => s.Id)); CreateMap() diff --git a/IRaCIS.Core.Application/TestService.cs b/IRaCIS.Core.Application/TestService.cs index dd70e2861..69d204b38 100644 --- a/IRaCIS.Core.Application/TestService.cs +++ b/IRaCIS.Core.Application/TestService.cs @@ -25,6 +25,8 @@ namespace IRaCIS.Application.Services var c = _dicRepository.Where(t => t.ParentId != null).Select(t => t.MappedValue).First(); CultureInfo culture = CultureInfo.CurrentUICulture; + + var d= _dicRepository.UpdateFromDTOAsync(new AddOrEditBasicDic() { Id =Guid.Parse("60d86683-c33b-4349-b672-08da1e91b622"), ParentId = null,ChildGroup = null,Code = null},true,true).Result; var a = 123; var b = _localizer["test{0}", "测试"]; diff --git a/IRaCIS.Core.Infra.EFCore/Repository/ICommandRepository.cs b/IRaCIS.Core.Infra.EFCore/Repository/ICommandRepository.cs index 6066bfd01..74ae723a1 100644 --- a/IRaCIS.Core.Infra.EFCore/Repository/ICommandRepository.cs +++ b/IRaCIS.Core.Infra.EFCore/Repository/ICommandRepository.cs @@ -18,7 +18,8 @@ namespace IRaCIS.Core.Infra.EFCore Task InsertFromDTOAsync(TFrom from, bool autoSave = false, params EntityVerifyExp[] verify); - Task UpdateFromDTOAsync(TFrom from, bool autoSave = false, params EntityVerifyExp[] verify); + Task UpdateFromDTOAsync(TFrom from, bool autoSave = false, bool ignoreDtoNullProperty = true, params EntityVerifyExp[] verify); + } diff --git a/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs b/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs index 1c35e4acc..162b7c4d0 100644 --- a/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs +++ b/IRaCIS.Core.Infra.EFCore/Repository/Repository.cs @@ -101,7 +101,7 @@ namespace IRaCIS.Core.Infra.EFCore } else { - return await UpdateFromDTOAsync(from, autoSave, verify); + return await UpdateFromDTOAsync(from, autoSave,false, verify); } } @@ -130,8 +130,7 @@ namespace IRaCIS.Core.Infra.EFCore } - public async Task UpdateFromDTOAsync(TFrom from, bool autoSave = false, - params EntityVerifyExp[] verify) + public async Task UpdateFromDTOAsync(TFrom from, bool autoSave = false, bool ignoreDtoNullProperty = true, params EntityVerifyExp[] verify) { var entity = _mapper.Map(from); @@ -164,12 +163,29 @@ namespace IRaCIS.Core.Infra.EFCore var dbBeforEntity = dbEntity.Clone(); + _mapper.Map(from, dbEntity); + + //DTO null 属性不更新 防止意外操作,导致保存数据错误,或者 add 和update 用一个模型,更新的时候,只传递了部分字段,导致,不想更新的字段,因为没传递值,用null覆盖了 + // Guid?属性 为null 时 映射到 Guid 时 默认会变成 Guid.Empty + if (ignoreDtoNullProperty) + { + foreach (var propertyInfo in from.GetType().GetProperties()) + { + if (propertyInfo.GetValue(from) == null) + { + _dbContext.Entry(dbEntity).Property(propertyInfo.Name).IsModified = false; + } + } + } + if (autoSave) { await SaveChangesAsync(); } + + return dbBeforEntity; }