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;">if</span> (fieldNames != <span style="color: #0000ff;">null</span> && fieldNames.Count > <span style="color: #800080;">0</span><span style="color: #000000;">)
{
context.Set</span><T><span style="color: #000000;">().Attach(entity);
</span><span style="color: #0000ff;">foreach</span> (<span style="color: #0000ff;">var</span> item <span style="color: #0000ff;">in</span><span style="color: #000000;"> fieldNames)
{
context.Entry</span><T>(entity).Property(item).IsModified = <span style="color: #0000ff;">true</span><span style="color: #000000;">;
}
}
</span><span style="color: #0000ff;">else</span><span style="color: #000000;">
{
context.Entry</span><T>(entity).State =<span style="color: #000000;"> System.Data.Entity.EntityState.Modified;
}
</span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">await</span><span style="color: #000000;"> context.SaveChangesAsync();
}
}</span></pre>
将变化的字段名称放在集合中,并修改其是否变化的状态。 Task<> UpdateAsync(T entity,Dictionary<,>
</span><span style="color: #0000ff;">if</span> (dic != <span style="color: #0000ff;">null</span><span style="color: #000000;">)
{
SetValue</span><T><span style="color: #000000;">(dic,entity);
</span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">await</span><span style="color: #000000;"> _baseData.UpdateAsync(entity,dic.Keys.ToList());
}
</span><span style="color: #0000ff;">else</span><span style="color: #000000;">
{
</span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">await</span> _baseData.UpdateAsync(entity,<span style="color: #0000ff;">null</span><span style="color: #000000;">);
}
}
</span><span style="color: #0000ff;">catch</span><span style="color: #000000;"> (Exception ex)
{
</span><span style="color: #0000ff;">throw</span><span style="color: #000000;"> ex;
}
}</span></pre>
SetValue
}
}
}
}</span></pre>
通过反射的方式对变化的字段进行赋值。字段中保存变化的字段名称与值。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |