EF Code-first:如何缓存DbCompiledModel?

Vla*_*lov 3 .net entity-framework ef-code-first entity-framework-4.1

我使用Code-First aproach为EF 4.1 RC设置了一个简单的测试项目.我所看到的,每次调用新的MyContext()都需要相当长的时间.我发现,有一个构造函数接受DbCompiledModel和描述http://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbcompiledmodel(v=VS.103).aspx说,为了更好的性能,缓存此对象是一件好事.但我无法找到如何从现有上下文中获取DbCompiledModel.并且网上没有样品.

Lad*_*nka 9

模型已经缓存.您可以通过在您的OnModelCreating方法中添加breakpoing来轻松验证它.它只会在您第一次创建上下文时被点击.如果要DbCompiledModel手动创建,则必须首先DbModelBuilder在上下文之外创建.使用它的Build方法,然后Compile产生DbModel.


Vla*_*lov 7

这是我重新思考后发现的.您可以使用以下代码获得已编译模型的副本.

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        var model = modelBuilder.Build(Database.Connection);
        var compliedModel = model.Compile();
    }
Run Code Online (Sandbox Code Playgroud)

但是,当我将该模型传递给我的上下文并进行一些性能测试时,将它们与对新MyContext()的简单调用进行比较.我发现,由于时间相同,因此上下文已经缓存了已编译的模型.因此,编译模型的缓存似乎只需要手工制作.