• Entity Framework中AutoDetectChangesEnabled為false時更新DB方法


    Entity Framework初始化時執行:

    Configuration.AutoDetectChangesEnabled = false;

    會將數據庫變為NotTrack模式,也就是不會自動同步对象与其属性的状态。

    這時候如果將數據表中的某行數據修改,並執行SaveChanges(),會發現數據庫中的數據並沒有保存修改後值。

    解決方法有以下幾種:

    1. 通過System.Data.Entity.Infrastructure.DbEntityEntry,然後直接修改數據行的狀態,此方法會將所有表中所有列數據全部update,不推薦
      System.Data.Entity.Infrastructure.DbEntityEntry entryObj = dbContext.Entry<TableName>(tableObj);
                                  entryObj.State = System.Data.Entity.EntityState.Modified;
    2. 通過System.Data.Entity.Infrastructure.DbEntityEntry對象的Property方法取得字段,然後設置CurrentValue屬性
      System.Data.Entity.Infrastructure.DbEntityEntry entryObj = dbContext.Entry<TableName>(tableObj);
                                  entryObj.Property(t => t.FieldName).CurrentValue = NewValue;
    3. 通過第三方EntityFramework.Utilities包,執行AttachAndModify方法後,針對修改字段執行Set方法
      dbContext.AttachAndModify(tableObj)
                                 .Set(x => x.FieldName, NewValue);
    4. 通過第三方Z.EntityFramework.Plus包,執行Update的擴展方法【多用於批次修改數據】
      dbcontext.tableName
                          .Where(p => ....)
                          .Update(p => new TableName() { FieldName = NewValue });
  • 相关阅读:
    AFNetworking
    Alpha、Beta、RC、GA版本的区别
    Cocoa的MVC架构分析
    Core Graphics 和Quartz 2D的区别
    Linux基础--03--磁盘分区、挂载
    Linux基础--02--top、free and ps
    linux基础-01-用户和目录、vim、归档和解压、系统启动流程、加密
    Oracle VM VirtualBox 中安装linux步骤
    009--项目成本管理
    008--项目立项管理
  • 原文地址:https://www.cnblogs.com/ywkpl/p/7595991.html
Copyright © 2020-2023  润新知