public static async Task <BaseResult <object> > ServiceDeleteEntityHelper <TEntity>( object id, IUnityOfWork_EF uow) where TEntity : AuditableEntityBase { var response = new BaseResult <object>(); // Obtener la entidad desde la BD para eliminarla (lógicamente) var entityFromDb = await uow.GetRepository <TEntity>().GetById(id); // Si la entidad ya está eliminada o no existe, no hacer nada y devolver null if (entityFromDb == null || entityFromDb.IsDeleted) { response.Data = null; return(response); } // Actualizar propiedades de la entidad AppHelpers.SetFieldsForEntityDeletion(entityFromDb); // Guardar la entidad eliminada lógicamente await uow.GetRepository <TEntity>().Update(entityFromDb); await uow.SaveAsync(); // Solo devolver el ID de la entidad eliminada lógicamente response.Data = id; return(response); }
public static async Task <BaseResult <TDto> > ServiceCreateEntityHelper <TEntity, TDto, TIdPropertyType>( TEntity newEntity, string propertyName, IUnityOfWork_EF uow, string GetById_Command) where TEntity : AuditableEntityBase { var response = new BaseResult <TDto>(); // Actualizar propiedades de la entidad AppHelpers.SetFieldsForEntityUpdate(newEntity); // Guardar la nueva entidad await uow.GetRepository <TEntity>().Add(newEntity); await uow.SaveAsync(); // Devolver la entidad recien guardada desde la BD response.Data = await uow.GetConnection.QuerySingleOrDefaultAsync <TDto>(GetById_Command, new { id1 = AppHelpers.GetPropertyValue(newEntity, propertyName) }); return(response); }
public static async Task <BaseResult <TDto> > ServiceUpdateEntityHelper <TEntity, TDto, TIdPropertyType>( TEntity updatedEntity, TIdPropertyType id, string propertyName, IUnityOfWork_EF uow, string GetById_Command) where TEntity : AuditableEntityBase { var response = new BaseResult <TDto>(); // Detectar inconsistencia entre el Id y la entidad (deben ser iguales en valores) if (!((TIdPropertyType)id).Equals((TIdPropertyType)AppHelpers.GetPropertyValue(updatedEntity, propertyName))) { throw new Exception(AppMessages.UPDATE_ID_ERROR); } // Obtener la entidad desde la BD para comparar con la recibida var entityFromDb = await uow.GetRepository <TEntity>().GetById(id); // Si la entidad ya está eliminada o no existe, no hacer nada y devolver null if (entityFromDb == null || entityFromDb.IsDeleted) { response.Data = default(TDto); return(response); } // Comparar con la entidad de la BD y detectar un cambio no permitido if (AppHelpers.NotAllowedChanges(entityFromDb, updatedEntity)) { throw new Exception(AppMessages.UPDATE_FORBIDDEN_FIELDS); } // Actualizar propiedades de la entidad AppHelpers.SetFieldsForEntityUpdate(updatedEntity); // Guardar la entidad actualizada await uow.GetRepository <TEntity>().Update(updatedEntity); await uow.SaveAsync(); // Devolver la entidad recien guardada desde la BD response.Data = await uow.GetConnection.QuerySingleOrDefaultAsync <TDto>(GetById_Command, new { id1 = id }); return(response); }