【问题标题】:Is ProxyCreationEnabled = false is equal to AsNoTracking() in Entity framework?ProxyCreationEnabled = false 是否等于实体框架中的 AsNoTracking()?
【发布时间】:2017-11-15 07:41:26
【问题描述】:

ProxyCreationEnabled = false 是否等于实体框架中的 AsNoTracking()?

我们可以在表级别使用 AsNoTracking()。但是如何在存储过程中使用 AsNoTracking()。

【问题讨论】:

  • 不跟踪存储过程的结果,不需要AsNoTracking()选项
  • 你有什么调用 SP 的方法 - 例如DbSet.SqlQueryDatabase.SqlQuery 还是?
  • 就我而言,我想提高我的 api 服务的性能。到目前为止,对于 get 方法,我已将 AsNoTracking() 与 table 一起用于从 DB 中检索数据。所以我应该包括“ProxyCreationEnabled = false”来提高性能还是不需要。我在实体框架中使用了一些SP。如何提高具有实体SP从数据库检索数据的web api的性能

标签: c# performance linq asp.net-web-api entity-framework-6


【解决方案1】:

代理和跟踪是两个不同但可以组合的概念。

代理在运行时为延迟加载、属性更改等高级功能生成派生类。虽然代理通常与跟踪上下文相结合,但不一定必须这样做。

跟踪 指示您的打开上下文是否保存了对返回对象的引用并能够检测到对它的更改。它可以在有或没有代理的情况下做到这一点。如果没有代理,当您调用 Save() 时,上下文会“简单地比较”所有跟踪的引用与其初始状态。

【讨论】:

  • 您好 Tozantron,感谢您的更新。就我而言,我想提高我的 api 服务的性能。到目前为止,对于 get 方法,我已将 AsNoTracking() 与 table 一起用于从 DB 中检索数据。那么我是否应该包括“ProxyCreationEnabled = false”来提高性能或不需要。我在实体框架中使用了一些SP。如何提高具有实体SP从数据库中检索数据的web api的性能。
  • 性能有很多不同的因素。禁用代理会有所帮助,但查看查询和数据结构也很重要。使用 new {} 仅加载所需的属性比加载整个实体更快,在 Db 上尽可能多地进行过滤,有时甚至对表进行非规范化也会有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多