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 = ;
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 = ;
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

EF更新指定字段...的更多相关文章

  1. EF更新指定字段.或个更新整个实体

    EF更新指定字段.或个更新整个实体 更新整个实体: public bool Update(Company compay) { if (compay != null) { dbContext.Entry ...

  2. 关于EF更新数据库,更新指定字段的设置

    1.关于EF跟新数据库更新指定字段的设置 在EF提交到数据库的时候或许某些字段不想更新.或者自己更新一个模型到数据库去! 1.更新数据不更新一些字段 /// <summary> /// 数 ...

  3. EF 更新部分字段写法

    EF 更新部分字段写法 1.EF默认是查询出来,修改后保存: 2.设置不修改字段的IsModified为false,此方法不需要先从数据库查询出实体来(最优方法): db.Set<T>() ...

  4. OnionArch - 如何实现更新指定字段的通用Handler

    博主最近失业在家,找工作之余,自己动手写了个洋葱架构(整洁架构)解决方案,以总结和整理以前的项目经验,起名叫OnionArch,其目的是为了更好的实现采用DDD(领域驱动分析)和命令查询职责分离(CQ ...

  5. 开发笔记:基于EntityFramework.Extended用EF实现指定字段的更新

    今天在将一个项目中使用存储过程的遗留代码迁移至新的架构时,遇到了一个问题——如何用EF实现数据库中指定字段的更新(根据UserId更新Users表中的FaceUrl与AvatarUrl字段)? 原先调 ...

  6. EF 更新指定的字段

    假如你有个表,有30个字段,你只想更新其中的1到2个字段的话,就可以用得上这篇文章 作用:类似于我们以前的sql代码 update xxx表 set name='ok',pwd='ok' where ...

  7. EF扩展 更新指定字段

    using System.Data.Entity.Infrastructure; using System.Threading.Tasks; /// <summary> /// EF扩展 ...

  8. MongoDB学习笔记~为IMongoRepository接口更新指定字段

    回到目录 对于MongoDB来说,它的更新建议是对指定字段来说的,即不是把对象里的所有字段都进行update,而是按需去更新,这在性能上是最优的,这当然也是非常容易理解的,我们今天要实现的就是这种按需 ...

  9. MySQL存储过程(更新指定字段的数据)

    mysql存储过程示例: USE 数据库名称;DROP PROCEDURE IF EXISTS 数据库名称.存储过程名称;delimiter $$CREATE PROCEDURE 数据库名称.存储过程 ...

随机推荐

  1. ListView优化-ViewHolder的优化备份

    ViewHolder.java package cn.edu.bzu.util; import android.content.Context; import android.util.SparseA ...

  2. [NOIP2012] 提高组 洛谷P1079 Vigenère 密码

    题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...

  3. js保留位和取整

    //hold是保留位,例,元,角,分 //integerType是在保留位的基础上,如果后面有值,向上向下取整 calAmount:function(hold,integerType,amount){ ...

  4. IEnumerable 遍历用法

    咋一看到IEnumerable这个接口,我们可能会觉得很神奇,在一般的编程时,基本上我们是想不到去用它的,可是,俗话说得好,存在便是道理,那么,它对我们来说,能够带来哪些奇妙的事情呢? 要想弄懂它,我 ...

  5. [IOS Tableview] cell自定义view显示错误问题

    问题介绍:按照tableviewcell的tag自定义cell的view显示的时候,会出现拖动时显示错误情况(在Tableview的范围超出屏幕范围需要滑动的情况下). 我做的是一个下载界面,我为了简 ...

  6. TCP/IP详解 笔记十四

    TCP/IP协议(二)  连接的建立与终止 tcpdump -S输出TCP报文的格式 格式: 源>目的:标志 (标志就是tcp头部).标识首字符意义如下: 例如:telnet 某服务的输出(包括 ...

  7. HDU 1166 敌兵布阵(线段树模板题)

    题目链接: 传送门 敌兵布阵 Time Limit: 2000MS     Memory Limit: 32768 K Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头 ...

  8. 旅图——UI测试

    测试目标 保证代码质量,确保基础功能的实现,可以有效地保证代码的可靠性,让模块在与别的模块整合时出现更少的错误,减少最终测试时查找困难无方向. UI测试 登录过程 模拟登录过程,密码正确与密码错误的情 ...

  9. java的对象的总结:(PO,VO,DAO,BO,POJO)

    一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合.PO中应该不包含任何对数 ...

  10. C#读写文本和连接数据库

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...