EF 更新部分字段寫法
1、EF默認是查詢出來,修改后保存;
2、設置不修改字段的IsModified為false,此方法不需要先從數據庫查詢出實體來(最優方法):
db.Set<T>().Attach(entity);//將數據用未更改的狀態放在上下文中,相當於從數據庫讀取了該實體 var loginUser = GetLoginUser(); entity.ModifyDate = DateTime.Now; entity.ModifyId = loginUser.Id; entity.ModifyName = loginUser.UserName; db.Entry(entity).State = EntityState.Modified; db.Entry(entity).Property("CreateId").IsModified = false; db.Entry(entity).Property("CreateName").IsModified = false; db.Entry(entity).Property("CreateDate").IsModified = false; db.SaveChanges();
3、使用 EntityFramework.Extended 擴展,缺點是EF的上下文日志不能捕獲執行的sql,此方法也比較麻煩需要逐一例舉修改的字段;該擴展還支持批量修改,批量更新,緩存..............
using EntityFramework.Extensions; db.Set<SysRole>().Where(c => c.Id == sysRole.Id) .Update(c => new SysRole { RoleName = sysRole.RoleName, Level = sysRole.Level, ModifyDate = DateTime.Now, ModifyId = loginUser.Id, ModifyName = loginUser.UserName });