阻止实体框架5查询Information_Schema_Tables

时间:2013-03-05 17:32:44

标签: c# entity-framework entity-framework-5

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

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

更新 我发现我可以通过调用

在per-dbContext基础上禁用它
System.Data.Entity.Database.SetInitializer<theDbContext>(null);

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

2 个答案:

答案 0 :(得分:2)

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

顺便说一下。从EF 4.3开始,你也可以change initializer from configuration,但它仍然是基于上下文的,因为人们通常不会有多个。

答案 1 :(得分:1)

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

我这样做也设置了一个参数来禁用AutoDetectChangesEnabled,LazyLoading&amp; Proxy CreationEnabled。