博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EF只更新变化的字段
阅读量:6506 次
发布时间:2019-06-24

本文共 3474 字,大约阅读时间需要 11 分钟。

摘要

在使用EF的时候,由于表字段较多,所以在更新的时候,想要只更新变化的字段,有没有办法呢?

解决办法

代码片段

public async Task
UpdateAsync(T entity, List
fieldNames) { using (var context = new RetailContext()) { if (fieldNames != null && fieldNames.Count > 0) { context.Set
().Attach(entity); foreach (var item in fieldNames) { context.Entry
(entity).Property(item).IsModified = true; } } else { context.Entry
(entity).State = System.Data.Entity.EntityState.Modified; } return await context.SaveChangesAsync(); } }

将变化的字段名称放在集合中,并修改其是否变化的状态。

public async Task
UpdateAsync(T entity, Dictionary
dic) { try { if (dic != null) { SetValue
(dic, entity); return await _baseData.UpdateAsync(entity, dic.Keys.ToList()); } else { return await _baseData.UpdateAsync(entity, null); } } catch (Exception ex) { throw ex; } }
///         /// 通过反射设置值        ///         /// 
/// /// public static void SetValue
(Dictionary
dic, T entity) where T : class ,new() { Type t = entity.GetType(); PropertyInfo[] properties = t.GetProperties(); foreach (var item in properties) { foreach (var key in dic.Keys) { if (key.ToLower() == item.Name.ToLower()) { switch (item.PropertyType.ToString()) { case "System.Int32": item.SetValue(entity, Convert.ToInt32(dic[key]), null); break; case "System.Boolean": item.SetValue(entity, Convert.ToBoolean(dic[key]), null); break; case "System.String": item.SetValue(entity, Convert.ToString(dic[key]), null); break; case "System.Decimal": item.SetValue(entity, Convert.ToDecimal(dic[key]), null); break; case "System.DateTime": item.SetValue(entity, Convert.ToDateTime(dic[key]), null); break; case "System.Guid": Guid g = dic[key] == null ? new Guid() : new Guid(dic[key].ToString()); item.SetValue(entity, g, null); break; default: item.SetValue(entity, dic[key], null); break; } } } } }

通过反射的方式对变化的字段进行赋值。字段中保存变化的字段名称与值。

转载地址:http://ovwfo.baihongyu.com/

你可能感兴趣的文章
nio和传统Io的区别
查看>>
移动端网页布局中需要注意事项以及解决方法总结
查看>>
oracle
查看>>
我也要谈谈大型网站架构之系列(2)——纵观历史演变(下)
查看>>
大话设计模式(Golang) 二、策略模式
查看>>
使用PostgreSQL 9.6 架设mediawiki服务器
查看>>
数据库服务器硬件对性能的影响
查看>>
LVM
查看>>
php 几个比较实用的函数
查看>>
(译)OpenGL ES2.0 – Iphone开发指引
查看>>
@RestController 与 @RequestMapping
查看>>
黑马程序员.bobo.DAY.1
查看>>
Unity shader 官网文档全方位学习(二)
查看>>
pbrun
查看>>
浏览器加载和渲染网页顺序
查看>>
深入剖析Android系统试读样章
查看>>
yaf的安装
查看>>
比较java与C++的不同
查看>>
Twitter Storm入门
查看>>
Ansible自动化运维配置与应用(结合实例)
查看>>