zoukankan      html  css  js  c++  java
  • MergeOption.NoTracking 与db.Detach(item)的区别

    接上一篇

    经过进一步测试发现

    db.Orders.MergeOption = System.Data.Objects.MergeOption.NoTracking;
    orderlist = db.Orders.ToList();
    查出来的东西,虽然状态也是Deteached,但是导航属性不是null
    image 

    手动Deteach之后

    db.ObjectStateManager.ChangeObjectState(item, System.Data.EntityState.Detached);
    或
    db.Detach(item);
    注意,第二种方法如果已经是Deteached状态会报错
    image 

    导航属性会为null

    但是如果查询的时候已经加了NoTracking,是不行的

    比如,在数据层,通过NoTracking方式取得了一些数据

    在逻辑层,需要放入cache。

    则需要建立一个新的ObejctContext先attach,再deteach,才能保证他的导航属性为null。

    导航属性为null,才能顺利的放入cache。

    为了在notracking下,导航属性为null,必须明确指定lazyload=false

    这算不算是ef的bug呢,同样都是deteached,但是状态却还有不同。

  • 相关阅读:
    Remote API(RAPI)之 文件管理
    vue前端框架

    托马斯彩色回旋
    VUE?
    cookie与session
    ajax前后端分离
    djangoIII
    Django少年
    django三板斧
  • 原文地址:https://www.cnblogs.com/czcz1024/p/2397911.html
Copyright © 2011-2022 走看看