使用EF 4.1,您曾经删除IncludeMetadataConvention,以防止EF在每次查询时查询数据库元数据。
在EF 5中,我收到关于IncludeMetadataConvention已经过时的警告,在LinqPad中,我可以看到EF现在正在查询每次使用时的迁移历史记录。我正在开发一个数据库第一个项目(但使用POCO和DbContext)。我不想要这些额外查询的开销。我该如何关闭它们?
更新 我发现我可以通过调用
在per-dbContext基础上禁用它System.Data.Entity.Database.SetInitializer<theDbContext>(null);
但是,我希望能够全局禁用初始化(想象一下大型应用程序,我们希望确保在部署生产时我们不运行这些查询(并且绝对不会尝试创建数据库)。
答案 0 :(得分:2)
如果您需要为大型应用程序中的每个上下文类型执行此操作,您可以创建一些代码,这些代码将遍历所有程序集,查找从DbContext
派生的所有类型,并通过反射为每个找到的内容调用该调用类型。
顺便说一下。从EF 4.3开始,你也可以change initializer from configuration,但它仍然是基于上下文的,因为人们通常不会有多个。
答案 1 :(得分:1)
为什么不将代码放在DbContext类的构造函数中?
我这样做也设置了一个参数来禁用AutoDetectChangesEnabled,LazyLoading&amp; Proxy CreationEnabled。