调整 仓储,提出独立的添加和更新
parent
4cbb37e1b5
commit
4cc64e1e21
|
@ -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());
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ namespace IRaCIS.Core.Domain.Models
|
|||
|
||||
public bool IsFirstAdd { get; set; } = true;
|
||||
|
||||
[NotMapped]
|
||||
[NotMapped]
|
||||
public string FullName { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
||||
//遍历实体模型手动配置
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue