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

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."
};
var entity = await _commonDocumentRepository.InsertOrUpdateAsync(addOrEditCommonDocument, true, verifyExp1);
var entity = await _commonDocumentRepository.InsertFromDTOAsync(addOrEditCommonDocument, true, verifyExp1);
return ResponseOutput.Ok(entity.Id.ToString());

View File

@ -68,7 +68,7 @@ namespace IRaCIS.Core.Domain.Models
public bool IsFirstAdd { get; set; } = true;
[NotMapped]
[NotMapped]
public string FullName { get; set; }
}
}

View File

@ -45,13 +45,6 @@ namespace IRaCIS.Core.Infra.EFCore
#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
{
@ -82,8 +75,8 @@ namespace IRaCIS.Core.Infra.EFCore
//modelBuilder.Entity<User>().Property(t => t.FullName) .HasComputedColumnSql("[LastName] + ' / ' + [FirstName]",false);
//modelBuilder.Entity<User>().Ignore(t => t.FullName);
modelBuilder.Entity<User>().Property(t => t.FullName) .HasDefaultValueSql("[LastName] + ' / ' + [FirstName]");
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
{
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> 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

View File

@ -65,8 +65,8 @@ namespace IRaCIS.Core.Infra.EFCore
Type type = typeof(TFrom);
//以下是不要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());
@ -97,63 +97,84 @@ namespace IRaCIS.Core.Infra.EFCore
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))
{
throw new BusinessValidationFailedException(verifyItem.VerifyMsg);
}
}
await _dbSet.AddAsync(entity).ConfigureAwait(false);
if (autoSave)
else if (verifyItem.verifyType == VerifyEnum.Both)
{
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)
{
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;
throw new BusinessValidationFailedException(
" Update object not exist in db,Please check if the parameter Id is passed incorrectly");
}
var dbBeforEntity = dbEntity.Clone();
_mapper.Map(from, dbEntity);
if (autoSave)
{
await SaveChangesAsync();
}
return dbBeforEntity;
}
public async Task<bool> SaveChangesAsync(CancellationToken cancellationToken = default)
{
@ -198,6 +219,8 @@ namespace IRaCIS.Core.Infra.EFCore
return entity;
}
public async Task<IEnumerable<TEntity>> AddRangeAsync(IEnumerable<TEntity> entities)
{
await _dbSet.AddRangeAsync(entities).ConfigureAwait(false);