摘要
在使用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(Dictionary<,> dic,T entity) T : ,== ( item ( key (key.ToLower() == = dic[key] == ? Guid() :
}
}
}
}</span></pre>
通过反射的方式对变化的字段进行赋值。字段中保存变化的字段名称与值。