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

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

@ -65,7 +65,7 @@ namespace IRaCIS.Core.Infra.EFCore
Type type = typeof(TFrom); Type type = typeof(TFrom);
//以下是不要ID这个字段的 比如自增列ID 就不能像上名那样写 //以下是不要ID这个字段的 比如自增列ID 就不能像上名那样写
var properties = type.GetProperties().Where(t=>t.Name!="Id"); var properties = type.GetProperties().Where(t => t.Name != "Id");
string strSqlName = string.Join(",", properties.Select(p => $"[{p.Name}]").ToArray()); string strSqlName = string.Join(",", properties.Select(p => $"[{p.Name}]").ToArray());
@ -97,63 +97,84 @@ 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);
}
}
foreach (var verifyItem in verify.Where(t => t.verifyType != VerifyEnum.OnlyUpdate && t.IsVerify)) 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))
{
if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false))
{
throw new BusinessValidationFailedException(verifyItem.VerifyMsg);
}
}
await _dbSet.AddAsync(entity).ConfigureAwait(false);
if (autoSave)
{
await SaveChangesAsync();
}
return entity;
}
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))
{
if (verifyItem.verifyType == VerifyEnum.OnlyUpdate)
{ {
if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false)) if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false))
{ {
throw new BusinessValidationFailedException(verifyItem.VerifyMsg); throw new BusinessValidationFailedException(verifyItem.VerifyMsg);
} }
} }
else if (verifyItem.verifyType == VerifyEnum.Both)
await _dbSet.AddAsync(entity).ConfigureAwait(false);
if (autoSave)
{ {
await SaveChangesAsync(); if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp.And(t => t.Id != entity.Id)).ConfigureAwait(false))
{
throw new BusinessValidationFailedException(verifyItem.VerifyMsg);
}
} }
return entity;
} }
else
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");
foreach (var verifyItem in verify.Where(t => t.verifyType != VerifyEnum.OnlyAdd && t.IsVerify))
{
if (verifyItem.verifyType == VerifyEnum.OnlyUpdate)
{
if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp).ConfigureAwait(false))
{
throw new BusinessValidationFailedException(verifyItem.VerifyMsg);
}
}
else if (verifyItem.verifyType == VerifyEnum.Both)
{
if (await _dbSet.IgnoreQueryFilters().AnyAsync(verifyItem.VerifyExp.And(t => t.Id != entity.Id)).ConfigureAwait(false))
{
throw new BusinessValidationFailedException(verifyItem.VerifyMsg);
}
}
}
var dbEntity = await _dbSet.IgnoreQueryFilters().FirstOrDefaultAsync(t => t.Id == entity.Id).ConfigureAwait(false);
var dbBeforEntity = dbEntity.Clone();
_mapper.Map(from, dbEntity);
if (autoSave)
{
await SaveChangesAsync();
}
return dbBeforEntity;
} }
var dbBeforEntity = dbEntity.Clone();
_mapper.Map(from, dbEntity);
if (autoSave)
{
await SaveChangesAsync();
}
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);