[英]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.