HOW TO:預先產生檢視表來改善查詢效能 (Entity Framework)

針對 實體資料模型 (EDM) 執行查詢之前,實體架構 會產生一組用來存取資料庫的檢視表。實體架構 會在第一次執行查詢時產生檢視表,然後在 ObjectContext 執行個體 (Instance) 的存留期 (Lifetime) 中保留這些檢視表。由於檢視表產生是執行單一查詢之整體成本的重要部分,所以 實體架構 可讓您預先產生這些檢視表並將它們包含在已編譯的專案中。除了產生與驗證 EDM 對應和模型檔案以外,EDM 產生器 (EdmGen.exe) 工具也會用來預先產生這些檢視表。本主題將示範如何使用 EdmGen.exe 來預先產生 School 模型的檢視表並將檢視表檔案加入至專案。School 模型是在 實體架構 快速入門中建立的。最後一個程序會示範如何將模型和對應檔案當做內嵌資源重新加入至 ASP.NET Web 應用程式。

Note附註

本主題中的程序會使用 Visual Studio 中的建置前和建置後事件 (ASP.NET 網站不支援)。若要針對 ASP.NET 網站所使用的 EDM 預先產生檢視表,您應該在個別的類別庫 (Class Library) 中建立 EDM、針對類別庫專案使用下列程序,並且在您的 ASP.NET 網站專案中參考此類別庫專案。或者,請考慮使用 ASP.NET Web 應用程式專案來取代 ASP.NET 網站。這樣做可讓您使用本主題的程序,將預先產生的檢視表與 ASP.NET Web 應用程式包含在相同的專案中。

預先產生的檢視表會在執行階段進行驗證,以便確保它們與目前的 EDM 版本一致。這項程序會確保檢視表與 EDM 相符。如果建置處理序已經在輸出目錄中產生了模型和對應檔,您就可以略過第一個程序。本主題中的程序會使用 School 模型。您可以透過完成快速入門 (Entity Framework),產生這個模型。

Note附註

Visual Studio 2008 Service Pack 1 (SP1) 是執行本主題中程序的必要條件。

若要在輸出目錄中產生 School 模型的模型和對應檔

  1. 在 [方案總管] 中,按兩下 School.edmx 檔案。

    這樣會在 [Entity Designer] 中顯示 School 模型。

  2. 在 [模型瀏覽器] 中,選取 SchoolModel 模型,並將 [Metadata Artifact Processing] 變更為 [複製到輸出目錄]。

    這樣可確保模型和對應檔會在輸出目錄中產生。

  3. 建置方案。

    這樣會在輸出目錄中產生模型和對應檔。

若要將檢視表產生加入至 Visual Basic 專案

  1. 在 [方案總管] 中,選取您想要指定建置事件的專案。

  2. 按一下 [專案] 功能表上的 [專案屬性]。

  3. 在 [屬性] 頁面上,按一下 [編譯] 索引標籤。

  4. 按一下 [建置事件] 按鈕。

  5. 在 [建置事件] 對話方塊中,加入下列建置前事件,但不含分行符號:

    "%windir%\Microsoft.NET\Framework\v3.5\EdmGen.exe" /nologo /language:VB 
    /mode:ViewGeneration "/inssdl:$(TargetDir)School.ssdl" 
    "/incsdl:$(TargetDir)School.csdl" "/inmsl:$(TargetDir)School.msl" 
    "/outviews:$(ProjectDir)School.Views.vb"
    
  6. 按一下 [確定]。

  7. 關閉 [專案屬性] 頁面。

  8. 建置方案。

    這樣會產生檢視表檔案 School.Views.cs。

  9. 在 [方案總管] 中,以滑鼠右鍵按一下專案名稱,然後選取 [加入現有項目]。

  10. 在 [加入現有項目] 對話方塊中,巡覽至專案的根資料夾,然後選取 School.Views.vb 檔案。

  11. 按一下 [加入]。

  12. 建置方案。

若要將檢視表產生加入至 C# 專案

  1. 在 [方案總管] 中,選取您想要指定建置事件的專案。

  2. 按一下 [專案] 功能表上的 [屬性]。

  3. 選取 [建置事件] 索引標籤。

  4. 在 [建置前事件命令列] 視窗中,加入下列建置前事件,但不含分行符號:

    "%windir%\Microsoft.NET\Framework\v3.5\EdmGen.exe" /nologo /language:CSharp 
    /mode:ViewGeneration "/inssdl:$(TargetDir)School.ssdl" 
    "/incsdl:$(TargetDir)School.csdl" "/inmsl:$(TargetDir)School.msl" 
    "/outviews:$(ProjectDir)School.Views.cs"
    
  5. 建置方案。

    這樣會產生檢視表檔案 School.Views.cs。

  6. 在 [方案總管] 中,以滑鼠右鍵按一下專案名稱,然後選取 [加入現有項目]。

    [加入現有項目] 對話方塊隨即顯示。

  7. 巡覽至專案的根資料夾,然後選取 School.Views.cs 檔案。

  8. 按一下 [加入]。

  9. 建置方案。

若要將對應和模型檔案當做 ASP.NET 專案的內嵌資源重新加入

  1. 在 [專案] 功能表上,按一下 [加入現有項目]。

  2. 瀏覽至專案的輸出目錄、選取 School.csdl,然後按一下 [確定]。

  3. 在 [方案總管] 中,選取加入的檔案。

  4. 在 [屬性] 中,將 [建置動作] 設定為 [內嵌資源]。

  5. 針對 School.ssdl 檔案和 School.msl 檔案重複步驟 1 至 3。

  6. 在 [方案總管] 中,按兩下 App.config 檔,然後根據下列其中一個格式來修改 connectionString 屬性中的 Metadata 參數:

    • Metadata=``res://<assemblyFullName>/<resourceName>;

    • Metadata=``res://*/<resourceName>;

    • Metadata=res://*;

    resourceName 可能會包含專案命名空間 (Namespace)。如需詳細資訊,請參閱連接字串 (Entity Framework)

另請參閱

參考

EDM 產生器 (EdmGen.exe)

其他資源

Entity Data Model 工具