EF5 DBContext配置被忽略

时间:2013-02-19 07:15:46

标签: entity-framework configuration lazy-loading dbcontext dynamic-proxy

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

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

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

在初始化上下文后,我需要做些什么才能将配置考虑在内?有可能吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

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