簡體   English   中英

EF Code-first:如何緩存DbCompiledModel?

[英]EF Code-first: how to cache DbCompiledModel?

我使用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。 並且網上沒有樣品。

模型已經緩存。 您可以通過將breakpoing放入OnModelCreating方法來輕松驗證它。 它只會在您第一次創建上下文時被點擊。 如果要手動創建DbCompiledModel ,必須首先在上下文之外創建DbModelBuilder 使用其Build方法,然后Compile生成的DbModel

這是我重新思考后發現的。 您可以使用以下代碼獲得已編譯模型的副本。

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

但是,當我將該模型傳遞給我的上下文並進行一些性能測試時,將它們與對新MyContext()的簡單調用進行比較。 我發現,由於時間相同,因此上下文已經緩存了已編譯的模型。 因此,編譯模型的緩存似乎只需要手工制作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM