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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了