【问题标题】:EF 6.1 Difference between ProxyCreationEnabled and LazyLoadingEnabledEF 6.1 ProxyCreationEnabled 和 LazyLoadingEnabled 之间的区别
【发布时间】:2014-11-01 10:07:18
【问题描述】:

在您的 DbContext 中,您可以配置以下两个参数:

context.Configuration.ProxyCreationEnabled = true;
context.Configuration.LazyLoadingEnabled = true;

我的理解是,要启用延迟加载,您必须能够为实体创建代理。换句话说,两个参数都需要设置为 true 才能启用延迟加载。

1.为什么这两个参数都存在,为什么可以同时配置这两个参数?

2。以下配置会产生什么效果?

// Can't create proxies but can lazy load
context.Configuration.ProxyCreationEnabled = false;
context.Configuration.LazyLoadingEnabled = true;

// Can create proxies but can't lazy load
context.Configuration.ProxyCreationEnabled = true;
context.Configuration.LazyLoadingEnabled = false;

【问题讨论】:

标签: c# entity-framework


【解决方案1】:

阿法伊克:

  • 代理创建 true 和延迟加载 true =>
    • 更改跟踪
    • 延迟加载
  • 代理创建 true 和延迟加载 false =>
    • 更改跟踪
  • 代理创建 false 和延迟加载 true =>
    • ...

参考(以及其他):msdn

【讨论】:

  • 感谢您的回答。代理如何改变变更跟踪的工作方式?
  • 没有代理,没有跟踪。所以context.SaveChanges() 永远不会做任何事情。
  • 我觉得change tracking跟proxy没什么关系,基本上据我了解,两者都是一起使用开启延迟加载,仅开启proxy没有任何好处,除非你能给出具体的代码解释这一点的示例,我只是尝试禁用两者,Find(1),更改道具,然后SaveChanges,保存更改
  • 我刚找到这篇文章link。看来更改跟踪仍然可以工作,只是以不同的方式工作
  • 跟踪需要代理,因为它们旨在用包含实体和允许跟踪的一些额外属性的代理替换真实实体实例:主要是State属性,值为@987654327 @、Unchanged 等。如果没有这些属性,EF 缺少重要信息来确定要保留的内容,因此 SaveChanges 并不总是按预期工作(并不是说它根本不起作用,新实体是仍然检测到并保存,但其他更改可能会丢失且不会保留)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 2021-12-25
  • 2020-05-10
  • 2014-09-20
  • 2010-10-28
  • 2015-10-04
相关资源
最近更新 更多