我使用 Code-First 方法为 EF 4.1 RC 设置了一个简单的测试项目。我看到,每次调用 new MyContext() 都需要很长时间。我发现,有一个构造函数接受 DbCompiledModel 和描述http://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbcompiledmodel(v=VS.103).aspx说,最好缓存这个对象,以获得更好的性能。但我找不到如何从现有上下文中获取 DbCompiledModel。而且网上没有样品。
问问题
6807 次
2 回答
9
模型已被缓存。OnModelCreating
您可以通过在您的方法中放置断点来轻松验证它。它只会在您第一次创建上下文时被击中。如果要DbCompiledModel
手动创建,则必须首先DbModelBuilder
在上下文之外创建。使用它的Build
方法然后Compile
结果DbModel
。
于 2011-03-27T19:02:27.110 回答
7
这是我重新思考后发现的。您可以使用以下代码为自己获取已编译模型的副本。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var model = modelBuilder.Build(Database.Connection);
var compliedModel = model.Compile();
}
但是,当我将该模型传递给我的上下文并进行一些性能测试,并将它们与对 new MyContext() 的简单调用进行比较时。我发现,该上下文已经在缓存编译模型,因为时间是相同的。因此,编译模型的缓存似乎只有在手工制作时才需要。
于 2011-03-27T18:58:48.313 回答