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

Entity Framework 必須先產生一組本機查詢檢視表來存取資料庫,然後才能針對概念模型執行查詢,或儲存變更至資料來源。這些檢視表屬於根據應用程式定義域所快取之中繼資料的一部分。如果您在相同的應用程式定義域中建立多個物件內容執行個體,它們將重複使用已快取之中繼資料中的檢視表,而非重新產生檢視表。由於檢視表產生作業是執行單一查詢之整體成本的重要部分,所以 Entity Framework 可讓您預先產生這些檢視表並將它們包含在已編譯的專案中。如需詳細資訊,請參閱 效能考量因素 (Entity Framework)

除了產生與驗證 Entity Framework 模型和對應檔以外,EDM 產生器 (EdmGen.exe) 工具也會用來預先產生這些檢視表。本主題將示範如何使用 EdmGen.exe 來預先產生 School 模型的檢視表並將檢視表檔案加入至專案。School 模型是在 Entity Framework 快速入門中建立的。最後一個程序會示範如何將模型和對應檔案當做內嵌資源重新加入至 ASP.NET Web 應用程式。

您也可以使用文字範本轉換工具組來產生預先編譯的檢視表。如需詳細資訊,請參閱如何使用 T4 範本產生檢視表

Bb896240.note(zh-tw,VS.100).gif注意:
本主題中的程序會使用 Visual Studio 中的建置前和建置後事件 (ASP.NET 網站不支援)。若要預先產生 ASP.NET 網站所使用的檢視表,您應該在個別的類別庫 (Class Library) 中建立 .edmx 檔案,針對類別庫專案使用 How to: Use a Model Defined in a Class Library中的程序,並且在您的 ASP.NET 網站專案中參考此類別庫專案。或者,請考慮使用 ASP.NET Web 應用程式專案來取代 ASP.NET 網站。這樣做可讓您使用本主題的程序,將預先產生的檢視表與 ASP.NET Web 應用程式包含在相同的專案中。

預先產生的檢視表會在執行階段進行驗證,以便確保與模型和對應檔目前的版本一致。

本主題中的程序會使用 School 模型。您可以透過完成快速入門 (Entity Framework),產生這個模型。如果建置處理序已經在輸出目錄中產生了模型和對應檔,您就可以略過第一個程序。

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

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

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

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

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

  3. 建置方案。

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

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

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

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

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

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

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

    "%windir%\Microsoft.NET\Framework\v4.0.30319\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.vb。

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

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

  11. 按一下 [加入]。

  12. 建置方案。

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

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

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

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

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

    "%windir%\Microsoft.NET\Framework\v4.0.30319\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 可能會包含專案命名空間。如需詳細資訊,請參閱連接字串 (Entity Framework)

另請參閱

參考

EDM 產生器 (EdmGen.exe)

其他資源

Entity Data Model Tools
在 Entity Framework 4 中使用預先編譯/預先產生的檢視表隔離效能