EF更新指定字段...


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM