• 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 });
  • 相关阅读:
    MySQL组提交(group commit)
    MySQL 热快问题解决
    Mysql 高可用集群PXC
    向量的点积(标量积、内积)
    BitmapData.threshold()方法
    Unity 自定义导入时切割Sprite
    匀变速直线运动的速度与位移的关系
    1.1.2 三角形余弦定理
    ccc切割刚体
    Unity 获取指定资源目录下的所有文件
  • 原文地址:https://www.cnblogs.com/ywkpl/p/7595991.html
Copyright © 2020-2023  润新知