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. Struts 2 Learning

    目录 . J2EE简介 . JAVA EE应用的分层模型 . 搭建Struts2 Demo应用 . struts2流程 . struts2的常规配置 . 实现Action . 配置Action . 配 ...

  2. FUSE 简介

    编译别人改过的一个 OpenWRT ,发现用到了一个叫 FUSE 的包.感兴趣了解一下. FUSE 是 Filesystem in USErspace 的简称.对于文件系统,经常安装系统.格式化 U ...

  3. log4j属性详解

    Log4j有三个主要的组件:Loggers(记录器),Appenders  (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻 ...

  4. COGS 577 蝗灾

    传送门 时间限制:2 s 内存限制:128 MB DESCRIPTION C国国土辽阔,地大物博......但是最近却在闹蝗灾..... 我们可以把C国国土当成一个W×W的矩阵,你会收到一些诸如(X, ...

  5. python中set使用

    In [2]: a = set() # 常用操作1 In [3]: a Out[3]: set() In [4]: type(a) Out[4]: set In [5]: b = set([1, 3] ...

  6. EmguCV 一些基本操作

    http://www.cnblogs.com/alsofly/p/3524866.html?utm_source=tuicool&utm_medium=referral 一.先是在程序中图像的 ...

  7. wpf 线程

    一.线程概述:[引用MSDN] 通常,WPF 应用程序从两个线程开始:一个用于处理呈现,一个用于管理 UI.呈现线程有效地隐藏在后台运行,而 UI 线程则接收输入.处理事件.绘制屏幕以及运行应用程序代 ...

  8. 原创最简单的ORM例子

    这个仅是为了培训做的一个小例子 public class DB     { public static string GetClassName(Type type) { if (type == nul ...

  9. js 正则表达式提取内容

    var wlan = /([a-zA-Z0-9]+)\s+Scan completed :/ var current_wlan="" if (line.match("Sc ...

  10. 自然语言0_nltk中文使用和学习资料汇总

    http://blog.csdn.net/huyoo/article/details/12188573 官方数据 http://www.nltk.org/book/ Natural Language ...