EF指定更新字段


使用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(),為什么不直接集成到方法里面呢?這個就因需求而變化了,如果你的項目中不涉及到多張表的變化,不需要做一些事務性的處理,那集成到一個方法里面完全沒有問題,也支持這么做。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM