0

使用后更改配置时,我遇到了 EF5 DbContext 问题。我正在使用 POCO T4 模板。这是场景:

  • 我在我的上下文中查询一个集合并获取动态代理对象及其关系
  • 我修改上下文的配置以禁用动态代理和延迟加载,如下所示:

    context.Configuration.ProxyCreationEnabled = false;
    context.Configuration.LazyLoadingEnabled = false;
    
  • 然后我再次查询一个集合并通过代理和关系获得相同类型的结果。

初始化上下文后,我需要做什么来考虑配置?是否可以?

提前致谢!

4

1 回答 1

2

如果您查询一个集合,禁用代理创建并再次查询相同的集合,无论如何您都有很大的机会获得代理实体。原因是在上下文内部使用的身份映射。每个实体只能被上下文跟踪一次。因此,如果您在启用代理创建的情况下查询该集合,EF 将为从数据库加载的每条唯一记录创建具有动态代理的实体实例。当您在禁用代理创建后再次查询该集合时,EF 将重用所有已创建的实体(及其代理)并仅为尚未加载的记录创建没有动态代理的新实体。

如果您想避免这些代理,您必须:

  • 在第一次查询之前关闭代理创建
  • 为第二个查询使用新上下文

您也可以尝试使用AsNoTracking(),但我怀疑它不会起作用。

于 2013-02-19T09:04:14.080 回答