分享 2 个 .NET EF 6 只更新某些字段的方法

简介: 分享 2 个 .NET EF 6 只更新某些字段的方法

前言

EF 更新数据时,通常情况下,是更新全部字段的,但实际业务中,更新全部字段的情况其实很少,一般都是修改其中某些字段,所以为了实现这个目标,很多程序员通常会这样作:

  1. 先从数据库中查询出实体对象,
  2. 然后修改其中某些字段字段的值,
  3. 最后再把整个实体对象的数据重新保存到数据库。

这样做性能很低,也不安全,那些不需要修改的字段的数据有可能这个过程中受到破坏。

其实有更好的作法的,本文抛砖引玉,分享 2 个 .NET EF 6 只更新某些字段的更好的方法。

代码

  1. 方法1: 更新数据不更新一些字段,留意注释
public void UpdateSomeField(int id)
{
  // 1. 先查询实体
  var user = DbContent.t_user.Where(o => o.id == id).FirstOrDefault();
  
  // 2. 再修改字段的值
  user.name = "周";
  user.age = 1;
  
  // 3. age 属性不想修改,标记其 IsModified 属性 = false
  // ---- 设置容器空间某一个模型的某一个字段 不提交到数据库
  // ---- DbContent.Entry 是要更新到数据库的整个对象
  
  DbContent.Entry<t_user>(user).Property("age").IsModified = false;
  
  // 4. 更新数据
  DbContent.SaveChanges();
}
  1. 方法2: 直接添加模型更新,留意注释
public void UpdateSomeField(int id)
{
  // 1. 直接创建对象修改到数据库 不用先查询
  t_user user = new t_user()
  {
    id = id,
    name ="周",
    age=1,
  };
  
  // 2. 将实体对象加入 EF 对象容器中 获取容器对象
  DbEntityEntry<t_user> entry = DbContent.Entry<t_user>(user);
  
  // 3. 容器对象状态设置为 unchanged
  entry.State = System.Data.EntityState.Unchanged;
  
  // 4. 设置被改变的属性  是否要提交到数据库的字段
  entry.Property(a => a.name).IsModified = true;
  entry.Property(a => a.age).IsModified = true;
  
  // 5. 更新数据
  DbContent.SaveChanges();
}

总结

更新数据是实际业务中经常遇到的场景,可以进一步封装以上的方法,通过参数传递要修改或不修改的字段,提高 EF 6 的性能。你有更好的方法吗?欢迎分享讨论!

往期精彩

我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊程序人生,共同学习,共同进步


相关文章
|
2月前
|
SQL 缓存 开发框架
分享一个 .NET EF6 应用二级缓存提高性能的方法
分享一个 .NET EF6 应用二级缓存提高性能的方法
|
2月前
|
SQL 程序员
分享一个 .NET 通过监听器拦截 EF 消息写日志的详细例子
分享一个 .NET 通过监听器拦截 EF 消息写日志的详细例子
|
2月前
|
存储 开发框架 .NET
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
|
2月前
|
数据库
分享一个 .NET EF 6 扩展 Where 的方法
分享一个 .NET EF 6 扩展 Where 的方法
|
2月前
|
开发框架 前端开发 算法
分享 .NET EF6 查询并返回树形结构数据的 2 个思路和具体实现方法
分享 .NET EF6 查询并返回树形结构数据的 2 个思路和具体实现方法
|
2月前
|
SQL 程序员 数据库
总结查看 .NET EF 生成的 SQL 的 3 种方式,亲测可用
总结查看 .NET EF 生成的 SQL 的 3 种方式,亲测可用
|
1月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
34 7
|
1月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
47 0
|
2月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
40 0
|
2月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?