EF 更新部分欄位寫法 1、EF預設是查詢出來,修改後保存; 2、設置不修改欄位的IsModified為false,此方法不需要先從資料庫查詢出實體來(最優方法): 3、使用 EntityFramework.Extended 擴展,缺點是EF的上下文日誌不能捕獲執行的sql,此方法也比較麻煩需要逐一 ...
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 });