3

在 EF 4.1 中,您曾经删除 IncludeMetadataConvention 以防止 EF 在每次查询时查询数据库元数据。

在 EF 5 中,我收到有关 IncludeMetadataConvention 已过时的警告,在 LinqPad 中,我可以看到 EF 现在正在查询每次使用的迁移历史记录。我正在开发一个数据库优先项目(但使用 POCO 和 DbContext)。我不想要这些额外查询的开销。如何关闭它们?

更新 我发现我可以通过调用在每个 dbContext 的基础上禁用它

System.Data.Entity.Database.SetInitializer<theDbContext>(null);

但是,我希望能够全局禁用初始化(想象一个大型应用程序,我们希望确保在将其部署到生产环境时不会运行这些查询(并且绝对不会尝试创建数据库)。

4

2 回答 2

2

如果您需要为大型应用程序中的每个上下文类型执行此操作,您可以创建一些代码,这些代码将遍历您的所有程序集,找到所有派生自的类型,DbContext并通过反射为每个找到的类型调用该调用。

顺便提一句。从 EF 4.3 开始,您还可以从配置中更改初始化程序,但它仍然基于上下文,因为人们通常没有超过一个。

于 2013-03-05T18:54:26.153 回答
1

为什么不将代码放在 DbContext 类的构造函数中?

我这样做并设置了一个参数来禁用 AutoDetectChangesEnabled、LazyLoading 和 Proxy CreationEnabled。

于 2014-02-13T19:23:09.420 回答