zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    mem 预留内存
    关于内核反汇编,同时显示源文件
    读些笔记
    platform设备驱动
    glut 右键子菜单
    获取HINSTANCE
    window窗口样式style
    opengl 直线拾取
    glut弹出式菜单
    读取大恒采集卡c++代码
  • 原文地址:https://www.cnblogs.com/love-zf/p/5704269.html
Copyright © 2011-2022 走看看