接上一篇

经过进一步测试发现

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

手动Deteach之后

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

导航属性会为null

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

 

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

在逻辑层,需要放入cache。

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

 

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

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

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

相关文章:

  • 2021-12-27
  • 2021-09-10
  • 2021-12-04
  • 2022-02-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-09-13
  • 2022-12-23
  • 2021-10-22
  • 2022-12-23
  • 2021-08-22
  • 2021-12-16
相关资源
相似解决方案