加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

EF只更新变化的字段

发布时间:2020-12-15 04:37:44 所属栏目:百科 来源:网络整理
导读:摘要 在使用EF的时候,由于表字段较多,所以在更新的时候,想要只更新变化的字段,有没有办法呢? 解决办法 代码片段 Task > UpdateAsync(T entity,List > ( context = /spanspan style="color: #0000ff;"gt;if/span (fieldNames != span style="color: #000

摘要

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

解决办法

代码片段

Task<> UpdateAsync(T entity,List<> ( context = </span><span style="color: #0000ff;"&gt;if</span> (fieldNames != <span style="color: #0000ff;"&gt;null</span> &amp;&amp; fieldNames.Count > <span style="color: #800080;"&gt;0</span><span style="color: #000000;"&gt;) { context.Set</span><T><span style="color: #000000;"&gt;().Attach(entity); </span><span style="color: #0000ff;"&gt;foreach</span> (<span style="color: #0000ff;"&gt;var</span> item <span style="color: #0000ff;"&gt;in</span><span style="color: #000000;"&gt; fieldNames) { context.Entry</span><T>(entity).Property(item).IsModified = <span style="color: #0000ff;"&gt;true</span><span style="color: #000000;"&gt;; } } </span><span style="color: #0000ff;"&gt;else</span><span style="color: #000000;"&gt; { context.Entry</span><T>(entity).State =<span style="color: #000000;"&gt; System.Data.Entity.EntityState.Modified; } </span><span style="color: #0000ff;"&gt;return</span> <span style="color: #0000ff;"&gt;await</span><span style="color: #000000;"&gt; context.SaveChangesAsync(); } }</span></pre>

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

Task<> UpdateAsync(T entity,Dictionary<,> </span><span style="color: #0000ff;"&gt;if</span> (dic != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;) { SetValue</span><T><span style="color: #000000;"&gt;(dic,entity); </span><span style="color: #0000ff;"&gt;return</span> <span style="color: #0000ff;"&gt;await</span><span style="color: #000000;"&gt; _baseData.UpdateAsync(entity,dic.Keys.ToList()); } </span><span style="color: #0000ff;"&gt;else</span><span style="color: #000000;"&gt; { </span><span style="color: #0000ff;"&gt;return</span> <span style="color: #0000ff;"&gt;await</span> _baseData.UpdateAsync(entity,<span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;); } } </span><span style="color: #0000ff;"&gt;catch</span><span style="color: #000000;"&gt; (Exception ex) { </span><span style="color: #0000ff;"&gt;throw</span><span style="color: #000000;"&gt; ex; } }</span></pre>
SetValue(Dictionary<,> dic,T entity) T : ,== ( item ( key (key.ToLower() == = dic[key] == ? Guid() : } } } }</span></pre>

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读