调整 仓储,提出独立的添加和更新

Uat_Study
hang 2022-04-15 10:11:41 +08:00
parent 4cbb37e1b5
commit 4cc64e1e21
5 changed files with 79 additions and 57 deletions

View File

@ -47,7 +47,7 @@ namespace IRaCIS.Core.Application.Service
VerifyMsg = "Document Code Can not Repeat." VerifyMsg = "Document Code Can not Repeat."
}; };
var entity = await _commonDocumentRepository.InsertOrUpdateAsync(addOrEditCommonDocument, true, verifyExp1); var entity = await _commonDocumentRepository.InsertFromDTOAsync(addOrEditCommonDocument, true, verifyExp1);
return ResponseOutput.Ok(entity.Id.ToString()); return ResponseOutput.Ok(entity.Id.ToString());

View File

@ -45,13 +45,6 @@ namespace IRaCIS.Core.Infra.EFCore
#region IModelCacheKeyFactory #region IModelCacheKeyFactory
//public class DynamicModelCacheKeyFactory : IModelCacheKeyFactory
//{
// public object Create(DbContext context)
// => context is IRaCISDBContext dynamicContext
// ? (context.GetType(), dynamicContext._userInfo.IsEn_Us)
// : (object)context.GetType();
//}
public class DynamicModelCacheKeyFactoryDesignTimeSupport : IModelCacheKeyFactory public class DynamicModelCacheKeyFactoryDesignTimeSupport : IModelCacheKeyFactory
{ {
@ -82,8 +75,8 @@ namespace IRaCIS.Core.Infra.EFCore
//modelBuilder.Entity<User>().Property(t => t.FullName) .HasComputedColumnSql("[LastName] + ' / ' + [FirstName]",false); modelBuilder.Entity<User>().Property(t => t.FullName) .HasDefaultValueSql("[LastName] + ' / ' + [FirstName]");
//modelBuilder.Entity<User>().Ignore(t => t.FullName); modelBuilder.Entity<User>().Property(e => e.FullName).Metadata.SetBeforeSaveBehavior(PropertySaveBehavior.Ignore);
//遍历实体模型手动配置 //遍历实体模型手动配置

View File

@ -11,9 +11,15 @@ namespace IRaCIS.Core.Infra.EFCore
{ {
public interface ICommandRepository<TEntity>: ICommandRepository<TEntity, Guid> where TEntity : Entity public interface ICommandRepository<TEntity>: ICommandRepository<TEntity, Guid> where TEntity : Entity
{ {
Task<TEntity> InsertDictionaryAsync<TFrom>(TFrom from, params EntityVerifyExp<TEntity>[] verify); //Task<TEntity> InsertDictionaryAsync<TFrom>(TFrom from, params EntityVerifyExp<TEntity>[] verify);
Task<TEntity> InsertOrUpdateAsync<TFrom>(TFrom from, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify); Task<TEntity> InsertOrUpdateAsync<TFrom>(TFrom from, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify);
Task<TEntity> InsertFromDTOAsync<TFrom>(TFrom from, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify);
Task<TEntity> UpdateFromDTOAsync<TFrom>(TFrom from, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify);
} }
public interface ICommandRepository<TEntity, TKey> where TEntity : class public interface ICommandRepository<TEntity, TKey> where TEntity : class

View File

@ -97,8 +97,19 @@ namespace IRaCIS.Core.Infra.EFCore
if (entity.Id == Guid.Empty) if (entity.Id == Guid.Empty)
{ {
return await InsertFromDTOAsync(from, autoSave, verify);
}
else
{
return await UpdateFromDTOAsync(from, autoSave, verify);
}
}
public async Task<TEntity> InsertFromDTOAsync<TFrom>(TFrom from, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify)
{
var entity = _mapper.Map<TEntity>(from);
foreach (var verifyItem in verify.Where(t => t.verifyType != VerifyEnum.OnlyUpdate && t.IsVerify)) foreach (var verifyItem in verify.Where(t => t.verifyType != VerifyEnum.OnlyUpdate && t.IsVerify))
{ {
if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false)) if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false))
@ -117,9 +128,13 @@ namespace IRaCIS.Core.Infra.EFCore
return entity; return entity;
} }
else
public async Task<TEntity> UpdateFromDTOAsync<TFrom>(TFrom from, bool autoSave = false,
params EntityVerifyExp<TEntity>[] verify)
{ {
var entity = _mapper.Map<TEntity>(from);
foreach (var verifyItem in verify.Where(t => t.verifyType != VerifyEnum.OnlyAdd && t.IsVerify)) foreach (var verifyItem in verify.Where(t => t.verifyType != VerifyEnum.OnlyAdd && t.IsVerify))
{ {
@ -141,6 +156,12 @@ namespace IRaCIS.Core.Infra.EFCore
var dbEntity = await _dbSet.IgnoreQueryFilters().FirstOrDefaultAsync(t => t.Id == entity.Id).ConfigureAwait(false); var dbEntity = await _dbSet.IgnoreQueryFilters().FirstOrDefaultAsync(t => t.Id == entity.Id).ConfigureAwait(false);
if (dbEntity == null)
{
throw new BusinessValidationFailedException(
" Update object not exist in db,Please check if the parameter Id is passed incorrectly");
}
var dbBeforEntity = dbEntity.Clone(); var dbBeforEntity = dbEntity.Clone();
_mapper.Map(from, dbEntity); _mapper.Map(from, dbEntity);
@ -150,9 +171,9 @@ namespace IRaCIS.Core.Infra.EFCore
await SaveChangesAsync(); await SaveChangesAsync();
} }
return dbBeforEntity; return dbBeforEntity;
}
}
}
public async Task<bool> SaveChangesAsync(CancellationToken cancellationToken = default) public async Task<bool> SaveChangesAsync(CancellationToken cancellationToken = default)
{ {
@ -198,6 +219,8 @@ namespace IRaCIS.Core.Infra.EFCore
return entity; return entity;
} }
public async Task<IEnumerable<TEntity>> AddRangeAsync(IEnumerable<TEntity> entities) public async Task<IEnumerable<TEntity>> AddRangeAsync(IEnumerable<TEntity> entities)
{ {
await _dbSet.AddRangeAsync(entities).ConfigureAwait(false); await _dbSet.AddRangeAsync(entities).ConfigureAwait(false);