转自: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 文件时将显示“生成视图”选项。

请注意,每次更改模型时,都需要通过重新运行“生成视图”命令来重新生成预编译视图。

(转)EF Power tool用法的更多相关文章

  1. Entity Framework Code First ---EF Power Tool MySql

    关于如何使用EF Power Tool的介绍请看 http://www.cnblogs.com/LingzhiSun/archive/2011/05/24/EFPowerTool_1.html, 这里 ...

  2. 使用 EF Power Tool Code Frist 生成 Mysql 实体

    原文:使用 EF Power Tool Code Frist 生成 Mysql 实体 1,在要生成的项目上右键   2,   3,   4,   5,  生成后的效果     已知问题: 1,在Mys ...

  3. Entity Framework Code First ---EF Power Tool 和MySql一起使用遇到的问题

    关于如何使用EF Power Tool的介绍请看 http://www.cnblogs.com/LingzhiSun/archive/2011/05/24/EFPowerTool_1.html, 这里 ...

  4. Entity Framework Code First使用者的福音 --- EF Power Tool使用记之一(转载)

    好像蛮长时间没有新文章带给大家了.前几天出差再加上忙着公司里的活儿,几乎都没时间上博客园了.今天正好有些时间,为大家简单介绍EF产品组新发布的一个牛逼的小工具——EF Power Tool(翻译的话, ...

  5. Entity Framework Code First使用者的福音 --- EF Power Tool使用记之二(问题探究)

    转:http://www.cnblogs.com/LingzhiSun/archive/2011/06/13/EFPowerTool_2.html   上次为大家介绍EF Power Tool之后,不 ...

  6. EF Power Tool 代码生成器 反向生成

    大致来说,这个工具有这样几个功能: 1) 按照现有数据库结构,生成Code First POCO class.DbContext class和相应的mapping class. 2) 以designe ...

  7. Entity Framework Code First使用者的福音 --- EF Power Tool使用记之一

    下次会为大家深入解析这个小工具.  最先看到这个工具是在EF产品组最新的博客文章上,http://blogs.msdn.com/b/adonet/archive/2011/05/18/ef-power ...

  8. 【转】MVC Model建模及Entity Framework Power Tool使用

    MVC如使用Code-First代码优先约定,先建实体类,再根据实体类创建数据库. 在创建实体类后,新建一个数据上下文类,如下: publicclassMusicStoreDB : DbContext ...

  9. Installing EF Power Tools into VS2015

    TLDR: If you don’t want to do the tasks (even though they are so easy) you can download the updated ...

随机推荐

  1. Haskell语言学习笔记(27)Endo, Dual, Foldable

    Endo Monoid newtype Endo a = Endo { appEndo :: a -> a } instance Monoid (Endo a) where mempty = E ...

  2. git基本命令之删除撤销操作

    1.将删除文件恢复--撤销所删除的文件git checkout 文件名 2.git resetgit reset --hard commitID(或某个节点)----强制切换到某个点,会导致所修改的内 ...

  3. apply和call用法

    资料来源:http://blog.csdn.net/business122/article/details/8000676 Js apply方法详解 我在一开始看到javascript的函数apply ...

  4. Managing Images on smartos

    SmartOS依赖images.images是包含在创建新zone或虚拟机时使用的磁盘或文件系统映像和元数据的模板. images使用imgadm工具进行管理. 使用此工具,您可以: 查看和下载在公共 ...

  5. R语言做条形图时候,离散变量和连续型变量的区别

    1)条形图 条形图或许是最常用图形,常用来展示分类(different categories on the x-axis)和数值(numeric values on the y-axis)之间的关系. ...

  6. Hive—简单窗口分析函数

    hive 窗口分析函数 : jdbc:hive2:> select * from t_access; +----------------+---------------------------- ...

  7. HTTP Error 500.0 - Internal Server Error错误代码0x80070002

    案例研究:AspNetInitClrHostFailureModule中的“HTTP错误500.0 - 内部服务器错误” 症状 当用户访问在Windows Server 2008 R2计算机上运行的A ...

  8. Windows phone 自定义控件(无外观控件)——ColorPicker

    编码前 在上一篇博客中,写的是一个UserControl的子类,它具有固定的外观(虽然也可以通过样式来进行修改,但受到的限制很大).如果你想要使用这个控件的逻辑,但是希望在使用的时候可以更改控件的外观 ...

  9. 如何添加ECSHOP广告位置

    如何添加ECSHOP广告位置 我们都知道ecshop系统默认的广告位置非常的少,但是一个电子商务网站岂能离开广告?庆幸的是,ecshop预留了足够强大的组件让我们能够完全有可能实现任意我们想要广告位置 ...

  10. springboot自定义消息转换器HttpMessageConverter

    在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成请求报文到对象和对象到响应报文的转换,底层这种灵活的消息转换机制就是利用HttpMessageCo ...