EF更新指定的字段(未改進版本)...
搜來搜去發現沒有自己想要的啊...
或許本來就有更好的辦法來實現我這個,所以沒有人來搞吧...
如果有,請不吝告知..GG..
//要更改UserInfo表中指定的列,比如這個表有15列,如果很多列都要更新,就要判斷要更新哪個不要更新哪個.. //現在這樣就是傳過來多少列,循環更新下就可以了 public string UserInfo_Update_Test(string jsonParames) { jsonParames = "一個json串";//比如:{ "ID": "7","LoginName": "修改后的登錄名","PassWord": "修改后的密碼"} Dictionary<string, object> userInfoDic = (Dictionary<string, object>)JSON.Instance.Parse(jsonParames);//需要引用fastJSON程序集 int ID = 0; if (userInfoDic.ContainsKey("ID")) { int.TryParse(userInfoDic["ID"].ToString(), out ID); } var db = new DBEntities(); UserInfo info = db.UserInfo.Single(u => u.ID == ID); //本來想的是一個個字段來判斷,if(userInfoDic.ContainsKey("要更新的字段")){info.要更新的字段 =userInfoDic["要更新的字段"]; } //由於UserInfo這個表字段較多...並且還有其他好多表要搞...所以用了下面的方法... #region 主要內容...用來替換太多的if判斷... foreach (var pro in info.GetType().GetProperties()) { if (userInfoDic.ContainsKey(pro.Name)) { pro.SetValue(info, userInfoDic[pro.Name]); } } db.SaveChanges();//這個不能忘... #endregion return null; }
EF更新指定的字段(改進版本)...
先將給實體賦值的步驟封裝為一個方法
/// <summary> /// 用戶更新的時候-entity是已經存在的值了 /// </summary> /// <typeparam name="TEntity"></typeparam> /// <param name="entity"></param> /// <param name="userInfoDic"></param> /// <returns></returns> public static TEntity setEntityValue<TEntity>(TEntity entity, Dictionary<string, Object> userInfoDic) where TEntity : class { //var entity = Activator.CreateInstance<TEntity>(); int tempInt = 0; DateTime tempDateTime = DateTime.Now; foreach (var pro in entity.GetType().GetProperties()) { //如果傳來的參數中有 全部屬性中的值,則開始賦值... //目的主要還是判斷傳來要更新的有哪些參數... if (userInfoDic.ContainsKey(pro.Name)) {//改進就是改進的這一部分,多出判斷,要不然會報錯! switch (pro.PropertyType.Name.ToLower()) { case "int32": //pro.SetValue(entity, userInfoDic[pro.Name].ToString());//測試代碼... int.TryParse(userInfoDic[pro.Name].ToString(), out tempInt); pro.SetValue(entity, tempInt); break; case "string": pro.SetValue(entity, userInfoDic[pro.Name].ToString()); break; case "datetime": //tempDateTime = DateTime.ParseExact(key.Value.ToString(), "", System.Globalization.CultureInfo.InvariantCulture); pro.SetValue(entity, tempDateTime); break; default: pro.SetValue(entity, userInfoDic[pro.Name].ToString()); break; } } } return entity; }
調用↓
DBEntities entity = new DBEntities(); UserInfo info = entity.UserInfo.SingleOrDefault(u => u.ID == ID); if (info != null) { info = setEntityValue<UserInfo>(info, userInfoDic); int changeCount = entity.SaveChanges(); retJsonStr = "{\"ret\":\"1\",\"msg\":\"" + Common.Enums.enumOperator.Edit.ToString() + "成功!更新數目" + changeCount.ToString() + "\"}";//返回的json數據 }
x
