zoukankan      html  css  js  c++  java
  • 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 });
  • 相关阅读:
    Spring学习,初识Spring
    Spring学习整理
    表单验证一些思考
    为什么要使用mybaits
    JDBC缺点分析
    Java 学习笔记提高篇
    Java基础学习笔记(四)
    Java基础学习笔记(三)
    Java学习笔记(二)
    centos7运行级别和图形界面相关操作
  • 原文地址:https://www.cnblogs.com/ywkpl/p/7595991.html
Copyright © 2011-2022 走看看