设为首页 加入收藏

TOP

EF指定更新字段
2019-09-24 11:16:39 】 浏览:49
Tags:指定 新字

使用EF做更新时,若没有进行跟踪会默认全字段更新,那怎么做到只更新我们想要更新的字段呢?

 1 /// <summary>
 2 /// 修改指定属性的单条数据
 3 /// </summary>
 4 /// <typeparam name="T">实体</typeparam>
 5 /// <param name="context">上下文</param>
 6 /// <param name="model">要修改的实体信息</param>
 7 /// <param name="expression">指定修改的字段</param>
 8 public static void Modify<T>(this DbContext context, T model, Expression<Func<T, object>> expression)
 9     where T : class
10 {
11     context.Update(model);
12     //4.1将 对象 添加到 EF中
13     var entry = context.Entry<T>(model);
14     //4.2先设置 对象的包装 状态为 Unchanged
15     entry.State = EntityState.Unchanged;
16     //4.3循环 被修改的属性名 数组
17     foreach (var proInfo in expression.GetPropertyAccessList())
18     {
19         if (!string.IsNullOrEmpty(proInfo.Name))
20             //4.4将每个 被修改的属性的状态 设置为已修改状态;后面生成update语句时,就只为已修改的属性 更新
21             entry.Property(proInfo.Name).IsModified = true;
22     }
23 }

使用:如下,更新表Model中Status和UpdateTime字段 

1 _dbContext.Modify(Model, p => new
2 {
3     p.Status,
4     p.UpdateTime
5 });
6 await _dbContext.SaveChangesAsync();

有的同学会发现,调用的时候使用了_dbContext.SaveChangesAsync(),为什么不直接集成到方法里面呢?这个就因需求而变化了,如果你的项目中不涉及到多张表的变化,不需要做一些事务性的处理,那集成到一个方法里面完全没有问题,也支持这么做。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇.NET MVC5简介(二) 下一篇C#中datatable操作

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目