Entity Framework中AutoDetectChangesEnabled為false時更新DB方法
Entity Framework初始化時執行:
Configuration.AutoDetectChangesEnabled = false;
會將數據庫變為NotTrack模式,也就是不會自動同步对象与其属性的状态。
這時候如果將數據表中的某行數據修改,並執行SaveChanges(),會發現數據庫中的數據並沒有保存修改後值。
解決方法有以下幾種:
- 通過System.Data.Entity.Infrastructure.DbEntityEntry,然後直接修改數據行的狀態,此方法會將所有表中所有列數據全部update,不推薦
System.Data.Entity.Infrastructure.DbEntityEntry entryObj = dbContext.Entry<TableName>(tableObj); entryObj.State = System.Data.Entity.EntityState.Modified;
- 通過System.Data.Entity.Infrastructure.DbEntityEntry對象的Property方法取得字段,然後設置CurrentValue屬性
System.Data.Entity.Infrastructure.DbEntityEntry entryObj = dbContext.Entry<TableName>(tableObj); entryObj.Property(t => t.FieldName).CurrentValue = NewValue;
- 通過第三方EntityFramework.Utilities包,執行AttachAndModify方法後,針對修改字段執行Set方法
dbContext.AttachAndModify(tableObj) .Set(x => x.FieldName, NewValue);
- 通過第三方Z.EntityFramework.Plus包,執行Update的擴展方法【多用於批次修改數據】
dbcontext.tableName .Where(p => ....) .Update(p => new TableName() { FieldName = NewValue });