部分更新
parent
8bb6f1605d
commit
746366a1c2
|
@ -35,7 +35,8 @@ namespace IRaCIS.Core.Application.Filter
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
context.Result = new JsonResult(ResponseOutput.NotOk(" Program exception, please contact the developer! " + (context.Exception.InnerException is null ? (context.Exception.Message + context.Exception.StackTrace) : (context.Exception.InnerException?.Message + context.Exception.InnerException?.StackTrace)) ));
|
context.Result = new JsonResult(ResponseOutput.NotOk(" Program exception, please contact the developer! " + (context.Exception.InnerException is null ? (context.Exception.Message /*+ context.Exception.StackTrace*/)
|
||||||
|
: (context.Exception.InnerException?.Message /*+ context.Exception.InnerException?.StackTrace*/)) ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -295,9 +295,6 @@ namespace IRaCIS.Application.Services
|
||||||
public async Task<IResponseOutput> ModifyPassword(EditPasswordCommand editPwModel)
|
public async Task<IResponseOutput> ModifyPassword(EditPasswordCommand editPwModel)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//验证旧密码OK
|
//验证旧密码OK
|
||||||
var dbUser = await _userRepository.FirstOrDefaultAsync(t => t.Id == _userInfo.Id && t.Password == editPwModel.OldPassWord);
|
var dbUser = await _userRepository.FirstOrDefaultAsync(t => t.Id == _userInfo.Id && t.Password == editPwModel.OldPassWord);
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,9 @@ namespace IRaCIS.Application.Services
|
||||||
var c = _dicRepository.Where(t => t.ParentId != null).Select(t => t.MappedValue).First();
|
var c = _dicRepository.Where(t => t.ParentId != null).Select(t => t.MappedValue).First();
|
||||||
CultureInfo culture = CultureInfo.CurrentUICulture;
|
CultureInfo culture = CultureInfo.CurrentUICulture;
|
||||||
|
|
||||||
|
var dd= _dicRepository.UpdatePartialFields(Guid.Parse("8a90c96e-0776-4f7b-82a6-18933d339584"),
|
||||||
|
u => new Dictionary() { ParentId = null, Code = "test" }, true).Result;
|
||||||
|
|
||||||
|
|
||||||
var d = _dicRepository.UpdateFromDTOAsync(new AddOrEditBasicDic() { Id = Guid.Parse("60d86683-c33b-4349-b672-08da1e91b622"), ParentId = null, ChildGroup = null, Code = null }, true, true).Result;
|
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 a = 123;
|
||||||
|
|
|
@ -18,9 +18,9 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
Task<TEntity> UpdateFromDTOAsync<TFrom>(TFrom from, bool autoSave = false, bool ignoreDtoNullProperty = true, params EntityVerifyExp<TEntity>[] verify);
|
Task<TEntity> UpdateFromDTOAsync<TFrom>(TFrom from, bool autoSave = false, bool ignoreDtoNullProperty = true, params EntityVerifyExp<TEntity>[] verify);
|
||||||
|
|
||||||
|
|
||||||
TEntity UpdatePartialFields(TEntity entity, string[] propertyNames, bool autoSave = false, bool ignoreEntityNullProperty = true, params EntityVerifyExp<TEntity>[] verify);
|
Task<TEntity> UpdatePartialFields(TEntity entity, string[] propertyNames, bool autoSave = false, bool ignoreEntityNullProperty = true, params EntityVerifyExp<TEntity>[] verify);
|
||||||
|
|
||||||
//TEntity UpdatePartialFields(Guid id, Expression<Func<TEntity, TEntity>> updateFactory, bool autoSave = false, bool ignoreEntityNullProperty = true, params EntityVerifyExp<TEntity>[] verify);
|
Task<TEntity> UpdatePartialFields(Guid id, Expression<Func<TEntity, TEntity>> updateFactory, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ using Z.EntityFramework.Plus;
|
||||||
namespace IRaCIS.Core.Infra.EFCore
|
namespace IRaCIS.Core.Infra.EFCore
|
||||||
{
|
{
|
||||||
public class Repository<TEntity> : IRepository<TEntity>
|
public class Repository<TEntity> : IRepository<TEntity>
|
||||||
where TEntity : Entity
|
where TEntity : Entity, new()
|
||||||
{
|
{
|
||||||
public IMapper _mapper { get; set; }
|
public IMapper _mapper { get; set; }
|
||||||
public IRaCISDBContext _dbContext { get; set; }
|
public IRaCISDBContext _dbContext { get; set; }
|
||||||
|
@ -136,6 +136,7 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<TEntity> InsertFromDTOAsync<TFrom>(TFrom from, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify)
|
public async Task<TEntity> InsertFromDTOAsync<TFrom>(TFrom from, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify)
|
||||||
|
@ -146,11 +147,8 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
|
|
||||||
await _dbSet.AddAsync(entity).ConfigureAwait(false);
|
await _dbSet.AddAsync(entity).ConfigureAwait(false);
|
||||||
|
|
||||||
if (autoSave)
|
await SaveChangesAsync(autoSave);
|
||||||
{
|
|
||||||
await SaveChangesAsync();
|
|
||||||
|
|
||||||
}
|
|
||||||
return entity;
|
return entity;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -190,29 +188,67 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (autoSave)
|
await SaveChangesAsync(autoSave);
|
||||||
{
|
|
||||||
await SaveChangesAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return dbBeforEntity;
|
return dbBeforEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//public TEntity UpdatePartialFields(Guid id, Expression<Func<TEntity, TEntity>> updateFactory, bool autoSave = false, bool ignoreEntityNullProperty = true, params EntityVerifyExp<TEntity>[] verify)
|
/// <summary>
|
||||||
//{
|
/// 通过主键id 和表达式树 更新部分字段 例如 Guid.Parse("8a90c96e-0776-4f7b-82a6-18933d339584"),u => new Dictionary() { ParentId = null, Code = "test" } 默认会去处理更新更新人 更新时间
|
||||||
// EntityVerifyAsync(false, verify, id).RunSynchronously();
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <param name="updateFactory"></param>
|
||||||
|
/// <param name="autoSave"></param>
|
||||||
|
/// <param name="verify"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<TEntity> UpdatePartialFields(Guid id, Expression<Func<TEntity, TEntity>> updateFactory, bool autoSave = false, params EntityVerifyExp<TEntity>[] verify)
|
||||||
|
{
|
||||||
|
await EntityVerifyAsync(false, verify, id);
|
||||||
|
|
||||||
// var entity = updateFactory.Compile().Invoke(new TEntity() { Id = id });
|
var entity = new TEntity() { Id = id };
|
||||||
|
|
||||||
// var entityEntry = _dbContext.Entry(entity);
|
var entityEntry = _dbContext.Entry(entity);
|
||||||
// entityEntry.State = EntityState.Detached;
|
entityEntry.State = EntityState.Detached;
|
||||||
|
|
||||||
//}
|
|
||||||
|
Func<TEntity, TEntity> func = updateFactory.Compile();
|
||||||
|
|
||||||
|
List<PropertyInfo> list = ((MemberInitExpression)updateFactory.Body).Bindings.Select<MemberBinding, string>((Func<MemberBinding, string>)(_param1 => _param1.Member.Name)).Select<string, PropertyInfo>((Func<string, PropertyInfo>)(_param1 => (PropertyInfo)typeof(TEntity).GetProperty(_param1, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))).ToList<PropertyInfo>();
|
||||||
|
|
||||||
|
|
||||||
|
TEntity applyObj = func(entity);
|
||||||
|
|
||||||
|
foreach (PropertyInfo prop in list)
|
||||||
|
{
|
||||||
|
object value = prop.GetValue((object)applyObj);
|
||||||
|
prop.SetValue((object)entity, value);
|
||||||
|
|
||||||
|
_dbContext.Entry(entity).Property(prop.Name).IsModified = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
await SaveChangesAsync(autoSave);
|
||||||
|
|
||||||
|
return entityEntry.Entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private async Task<bool> SaveChangesAsync(bool autoSave)
|
||||||
|
{
|
||||||
|
if (autoSave)
|
||||||
|
{
|
||||||
|
return await SaveChangesAsync();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 部分字段更新 (只更新传递的字段名)
|
/// 部分字段更新 (只更新传递的字段名 new[] {nameof(User.Name), nameof(User.Age))
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="entity"></param>
|
/// <param name="entity"></param>
|
||||||
/// <param name="propertyNames"> 更新的字段数组 </param>
|
/// <param name="propertyNames"> 更新的字段数组 </param>
|
||||||
|
@ -220,10 +256,10 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
/// <param name="ignoreEntityNullProperty"></param>
|
/// <param name="ignoreEntityNullProperty"></param>
|
||||||
/// <param name="verify"></param>
|
/// <param name="verify"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public TEntity UpdatePartialFields(TEntity entity, string[] propertyNames,
|
public async Task<TEntity> UpdatePartialFields(TEntity entity, string[] propertyNames,
|
||||||
bool autoSave = false, bool ignoreEntityNullProperty = true, params EntityVerifyExp<TEntity>[] verify)
|
bool autoSave = false, bool ignoreEntityNullProperty = true, params EntityVerifyExp<TEntity>[] verify)
|
||||||
{
|
{
|
||||||
EntityVerifyAsync(false, verify, entity.Id).RunSynchronously();
|
await EntityVerifyAsync(false, verify, entity.Id);
|
||||||
|
|
||||||
var entityEntry = _dbContext.Entry(entity);
|
var entityEntry = _dbContext.Entry(entity);
|
||||||
entityEntry.State = EntityState.Detached;
|
entityEntry.State = EntityState.Detached;
|
||||||
|
@ -241,7 +277,7 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 更新 排除某些字段的更新
|
/// 更新 排除某些字段的更新 排除方式: new[] {nameof(User.Name), nameof(User.Age)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="entity"></param>
|
/// <param name="entity"></param>
|
||||||
/// <param name="propertyNames"></param>
|
/// <param name="propertyNames"></param>
|
||||||
|
@ -249,10 +285,10 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
/// <param name="ignoreEntityNullProperty"></param>
|
/// <param name="ignoreEntityNullProperty"></param>
|
||||||
/// <param name="verify"></param>
|
/// <param name="verify"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public TEntity UpdateExcludeFields(TEntity entity, string[] propertyNames, bool autoSave = false, bool ignoreEntityNullProperty = true, params EntityVerifyExp<TEntity>[] verify)
|
public async Task<TEntity> UpdateExcludeFields(TEntity entity, string[] propertyNames, bool autoSave = false, bool ignoreEntityNullProperty = true, params EntityVerifyExp<TEntity>[] verify)
|
||||||
{
|
{
|
||||||
|
|
||||||
EntityVerifyAsync(false, verify, entity.Id).RunSynchronously();
|
await EntityVerifyAsync(false, verify, entity.Id);
|
||||||
|
|
||||||
var entityEntry = _dbContext.Entry(entity);
|
var entityEntry = _dbContext.Entry(entity);
|
||||||
entityEntry.State = EntityState.Modified;
|
entityEntry.State = EntityState.Modified;
|
||||||
|
|
Loading…
Reference in New Issue