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. 洛谷P2746 [USACO5.3]校园网Network of Schools

    题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中. 你要写 ...

  2. IEnumerable 遍历用法

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

  3. PHP之:多图上传

    撰写日期:2016-6-30 15:17:35 Thursday 参考 http://a3147972.blog.51cto.com/2366547/1381136 (08-05ThinkPHP+sw ...

  4. 计算机图形学 - 图形变换(opengl版)

    作业题目: 图形变换:实现一个图形绕任意直线旋转的程序. 要求:把一个三维图形绕任意一条直线旋转,需要有初始图形,和旋转后的图形,最好也可以实时控制旋转. 最少要做出绕z轴旋转. 原理:http:// ...

  5. photoshop切图介绍

    第一部分:界面设置 1.点击“文件-新建”(或者ctrl+n)打开一个新建对话框.名称可随意填写.“预设”设置为自定,“宽度”一般选择1920,“单位”选为像素.“高度”可选择为2000,“单位”选为 ...

  6. BZOJ4522: [Cqoi2016]密钥破解

    pollard's rho模板题. 调参调到160ms无能为力了,应该是写法问题,不玩了. #include<bits/stdc++.h> using namespace std; typ ...

  7. 9.12 其他样式;JS

    Display 显示block和隐藏none,不占位置Visbility 显示visible和隐藏hidden,占位置Overflow 超出范围 hidden隐藏透明圆角 Js脚本语言(JavaScr ...

  8. Redis学习-开始

    C:\Program Files\Redis\redis-cli.exe 使用servicestack.redis class Program { static void Main(string[] ...

  9. dig的用法

    Dig是linux中的域名解析工具,功能比nslookup强很多,使用也很方便,不用象nslookup总是set不停. Dig是domain information groper的缩写,知道了来源想必 ...

  10. BigDecimal类

    如果需要精确的计算结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作. //========================================== ...