protected static bool MappingData <T>(T value, DxGrvObj obj) where T : BaseModel2 { foreach (JToken attribute in obj.Data) { JProperty jProperty = attribute.ToObject <JProperty>(); string propertyName = jProperty.Name; var prop = value.GetType().GetProperty(propertyName, BindingFlags.Public | BindingFlags.Instance); if (null != prop && prop.CanWrite) { prop.SetValue(value, jProperty.Value.ToObject(prop.PropertyType)); } } return(true); }
public static async Task <ApiResponseBase> HandleEdit <T>(ApplicationDbContext context, DxGrvObj obj, bool autoSave = false) where T : BaseModel2 { var respone = new ApiResponseBase(); var repo = context.Set <T>(); switch (obj.EditType) { case DxGrvEditType.Insert: try { var dbInsert = await repo.FirstOrDefaultAsync <T>(p => p.Id == obj.Key); if (dbInsert == null) { dbInsert = Activator.CreateInstance <T>(); dbInsert.CRUDDate = DateTime.Now; MappingData <T>(dbInsert, obj); await repo.AddAsync(dbInsert); respone.MakeTrue("Thêm mới thành công"); } } catch (Exception ex) { respone.MakeException(ex); } break; case DxGrvEditType.Update: try { var dbUpdateObj = await repo.FirstOrDefaultAsync <T>(p => p.Id == obj.Key); dbUpdateObj.CRUDDate = DateTime.Now; MappingData <T>(dbUpdateObj, obj); repo.Update(dbUpdateObj); respone.MakeTrue("Cập nhật thành công"); } catch (Exception ex) { respone.MakeException(ex); } break; case DxGrvEditType.Delete: try { var dbDeleteObj = await repo.FirstOrDefaultAsync <T>(p => p.Id == obj.Key); MappingData <T>(dbDeleteObj, obj); repo.Remove(dbDeleteObj); respone.MakeTrue("Đã xóa!"); } catch (Exception ex) { respone.MakeException(ex); } break; } if (autoSave) { await context.SaveChangesAsync(); } return(respone); }