2013-03-05 46 views
3

使用EF 4.1,您用于删除IncludeMetadataConvention以防止EF在每个查询上查询数据库元数据。阻止实体框架5查询Information_Schema_Tables

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

更新 我发现我可以在每个的DbContext基础上禁用此调用

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

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

回答

2

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

Btw。因为EF 4.3你也可以change initializer from configuration,但它仍然是每个环境的基础,因为人们通常没有多于一个。

+0

好吧,现在你已经很好奇了。这是否意味着人们通常只是拖回看起来完全像他们的桌子的物体?我一直在大型应用程序中使用每个模块的上下文,作为根据模块使用方式对同一表进行不同预测的方式。 – JMarsch 2013-03-05 19:46:19

+0

一般是的。你总是可以直接在linq查询中执行投影。 – 2013-03-05 20:37:13

1

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

我这样做,以及设置一个参数来禁用AutoDetectChangesEnabled,LazyLoading & Proxy CreationEnabled。