(轉)EF Power tool用法


轉自:http://msdn.microsoft.com/zh-cn/data/jj593170.aspx

命令摘要

安裝 EF Power Tools 后,將提供以下上下文菜單項。本演練將詳細討論這些選項: 

右鍵單擊 C# 項目時,您將會看到:

  • 對 Code First 進行反向工程 - 為現有數據庫生成 DbContext 派生類、POCO 類和 Code First 映射類。
  • 自定義反向工程模板 - 將默認反向工程 T4 模板添加到項目中,以便可以自定義代碼生成。

右鍵單擊包含 DbContext 派生類的文件時,您將會看到:

  • 查看實體數據模型(只讀) - 在 EF 設計器中顯示 Code First 模型的只讀視圖。
  • 查看實體數據模型 XML - 顯示表示基礎 Code First 模型的 EDMX XML。
  • 查看實體數據模型 DDL SQL- 顯示與基礎 EDM 模型中的 SSDL 相對應的 DDL SQL。
  • 生成視圖 - 生成預編譯視圖,EF 運行時可使用這些視圖提高啟動性能。 

右鍵單擊 EDMX 文件(使用 EF 設計器時生成)時,您將會看到: 

  • 生成視圖 – 說明同上。   

 

必備條件

要完成本演練,您需要安裝以下軟件: 

 

創建應用程序

本演練使用 Visual Studio 2012。

  • 打開 Visual Studio
  • “文件”->“新建”->“項目”…。
  • 在左窗格中選擇“Windows”,然后在右窗格中選擇“控制台”
  • 輸入 EFPowerToolsSample 作為名稱
  • 選擇“確定”

 

對 Code First 進行反向工程

“對 Code First 進行反向工程”命令用於根據現有數據庫,生成 POCO 類、映射(配置)類和 DbContext 派生類。

  • 右鍵單擊項目,然后選擇“實體框架”–>“對 Code First 進行反向工程”。
  • 輸入要根據其對 Code First 進行反向工程的現有數據庫的相關信息。

    注意:這將對數據庫中的所有表進行反向工程,因此如果不希望操作所有表,需要從模型中手動刪除不需要的表。

可以在 Visual Studio 的狀態欄中看到反向工程過程的進度。過程完成后,會對項目進行以下更新。

  • 使用連接字符串更新配置文件 (.config)
  • 在項目中添加對 EntityFramework NuGet 包的引用
  • “模型”文件夾下生成 DbContext 派生類和一組 POCO 類。此外,還會在嵌套在“模型”文件夾下的“映射”文件夾下生成映射類。 

在初始代碼生成覆蓋以前生成的文件后,重新運行此命令。

如果您對生成這些類的方式不完全滿意,可以在生成這些類后對其進行編輯,或者使用下一節介紹的“自定義反向工程模板”命令。

 

自定義反向工程模板

某些情況下,您可能希望更改生成代碼的方式。例如,生成的代碼使用 Fluent API 配置模型(如下所示),但您可能希望改用數據注釋。

本節的其余部分演示如何修改代碼生成,使表\列映射配置為使用數據注釋而不是 Fluent API(如下所示)。

  • 右鍵單擊項目,然后選擇“實體框架”–>“自定義反向工程模板”

    選擇“自定義反向工程模板”,然后將 T4 模板添加到項目中。隨后 EF Power Tools 使用這些模板為上下文、實體和映射類生成代碼。



    注意:您可能會看到因 Visual Studio 嘗試驗證該模板所導致的以下錯誤。由於我們不會在項目中運行這些模板,可以忽略該錯誤。


    正在編譯轉換: 找不到類型或命名空間名稱“EfTextTemplateHost”(是否缺少 using 指令或程序集引用?)

現在需要編輯這些模板。

  • 打開 Mapping.tt 文件。
    首先,我們將刪除生成 Fluent API 表\列映射的代碼
  • 在文件中搜索 var tableSet = efHost.TableSetstring(確保不要粘貼空格字符)。
  • 刪除從此行開始到 // Find m:m relationships to configure 上方的行結束的代碼。
    下面是要刪除的代碼:

        var tableSet = efHost.TableSet;

        var tableName = (string)tableSet.MetadataProperties["Table"].Value
            ?? tableSet.Name;
        var schemaName = (string)tableSet.MetadataProperties["Schema"].Value;
    #>
                // Table & Column Mappings
    <#
        if (schemaName == "dbo" || string.IsNullOrWhiteSpace(schemaName))
        {
    #>
                this.ToTable("<#= tableName #>");
    <#
        }
        else
        {
    #>
                this.ToTable("<#= tableName #>", "<#= schemaName #>");
    <#
        }
        foreach (var property in efHost.EntityType.Properties)
        {
    #>
                this.Property(t => t.<#= property.Name #>).HasColumnName("<#= efHost.PropertyToColumnMappings[property].Name #>");
    <#
        }

 

  • 保存 Mapping.tt 文件
  • 打開 Entity.tt 文件
    現在,我們將添加數據注釋映射以包含 [Table] 和 [Column] 屬性。 我們根據剛刪除的 Fluent API 代碼添加數據注釋代碼。當然,您可以進一步進行修改。 
  • 將添加 [Table] 屬性的代碼(顯示為黑色)粘貼到顯示為淺灰色的行的后面。

    namespace <#= code.EscapeNamespace(efHost.Namespace) #>

    {
    <#
        var tableSet = efHost.TableSet;
        var tableName = (string)tableSet.MetadataProperties["Table"].Value
            ?? tableSet.Name;
        var schemaName = (string)tableSet.MetadataProperties["Schema"].Value;
    #>
    <#
        if (schemaName == "dbo" || string.IsNullOrWhiteSpace(schemaName))
        {
    #>
        [Table("<#= tableName #>")]
    <#
        }
        else
        {
    #>
        [Table("<#= tableName #>", Schema="<#= schemaName #>")]
    <#
    }
    #>

 

  • 將添加 [Column] 屬性的代碼(顯示為黑色)粘貼到顯示為淺灰色的行的后面。

    foreach (var property in efHost.EntityType.Properties)
        {

    #>
            [Column("<#= efHost.PropertyToColumnMappings[property].Name #>")]
    <#

 

  • 我 們還需要添加一個 using 語句來指定定義數據注釋的位置。在最新版實體框架中,數據注釋在 System.ComponentModel.DataAnnotations.Schema 中定義。在以前的版本中,它們在 System.ComponentModel.DataAnnotations 中定義。我們將添加以下邏輯,以便根據 EF 版本添加正確的 using 語句。

    using System;

    using System.Collections.Generic;
    <#
           if (efHost.EntityFrameworkVersion >= new Version(4, 4))
            {
    #>
    using System.ComponentModel.DataAnnotations.Schema;
    <#
            }
            else
            {
    #>
    using System.ComponentModel.DataAnnotations;
    <#
            }
    #>

 

  • 保存 Entity.tt 文件
  • 重復反向工程過程,這一次將使用自定義模板生成代碼

 

注意:對 T4 模板進行更改后,必須執行以下操作才能使這些更改反映在代碼生成中:

  • 更新 .tt 文件后將其保存
  • 執行“對 Code First 進行反向工程”

 

查看實體數據模型

右鍵單擊包含 DbContext 派生類定義的文件時,您會看到本節介紹的三個 EDM 查看選項。

查看實體數據模型(只讀)

即使使用 Code First 開發時,您也可能希望以圖形方式查看模型。此“查看實體數據模型”選項在 EF 設計器中顯示 Code First 模型的只讀視圖。雖然使用 Designer 可以修改該模型,但您將無法保存所做的更改。

查看實體數據模型 XML

使用此選項可以查看表示基礎 Code First 模型的 EDMX XML。使用此選項的機會不會很多。偶爾在調試某些 Code First 問題時可能需要使用它。

查看實體數據模型 DDL SQL

使用此選項可以查看與基礎 EDM 模型中的 SSDL 相對應的 DDL SQL 腳本。當您要查看將由模型生成的表和列時,可能需要使用此選項。 

 

生成預編譯視圖

可以使用“生成視圖”選項生成預編譯的視圖,實體框架運行時可使用這些視圖提高啟動性能。所生成的視圖文件將添加到項目中。您可以在以下文章中詳細了解視圖編譯: 性能注意事項

使用 Code First 以及 EF 設計器時,都將提供“生成視圖”選項。

  • 如果使用 Code First,右鍵單擊包含 DbContext 派生類的文件時將顯示“生成視圖”選項。
  • 如果使用 EF 設計器,右鍵單擊 EDMX 文件時將顯示“生成視圖”選項。

請注意,每次更改模型時,都需要通過重新運行“生成視圖”命令來重新生成預編譯視圖。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM