转自: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. MySql PartionBy

    SELECT tableOld.*, if(@channelName = tableOld.channelName, @rank := @rank + 1, @rank := 1) AS rank, ...

  2. 更新日志(建议升级到2017.1.18a) && 更新程序的方法

    更新程序的步骤: 1,在控制面板里点击备份当前数据库文件到磁盘,把当天获取的信息从内存写到磁盘/存储卡.2,下载最新版的源码 wget -O "infopi.zip" " ...

  3. Dotfuscator Professional Edition获取代码发布和混淆代码

    1 Dotfuscator Professional Edition 4.9 破解版 下载地址:http://www.pc0359.cn/downinfo/39815.html 备份地址:C:\D\9 ...

  4. C#中导出EXCEL服务器端不用安装OFFICE

    在实际开发过程中,有时候服务器端没安装OFFICE,你和服务器管理员去商量安装个OFFICE的时候,管理员很倔犟的不给你安装的时候,这个时候就可以考虑我这个方法是实现导出EXCEL了.如果你导出的EX ...

  5. Python基础语法题库

    引言: 语法练习包括Python基础语法.数据类型.字符编码和简单文件操作等内容. 正文(参考答案附录在题目下方): 1.Python 里用来告知解释器跳过当前循环中的剩余语句,然后继续进行下一轮循环 ...

  6. dns server 配置

    # cat /etc/named.conf//// named.conf//// Provided by Red Hat bind package to configure the ISC BIND ...

  7. 联想笔记本Win10 F1-F12失效的解决方法

    最近换了笔记本,用的是win10,发现F1到F12不生效. 比如玩游戏时,按F1没有切换到自己角色上,编程运行代码时的shift+F10也不行. 后来发现,这是因为某些笔记本的Fn功能键默认的不是传统 ...

  8. Find Peak Element(ARRAY - Devide-and-Conquer)

    QUESTION A peak element is an element that is greater than its neighbors. Given an input array where ...

  9. Too Rich(贪心+DFS)

    Too Rich http://acm.hdu.edu.cn/showproblem.php?pid=5527 Time Limit: 6000/3000 MS (Java/Others)    Me ...

  10. Android Studio和SDK下载、安装和环境变量配置

    win10下Android Studio和SDK下载.安装和环境变量配置                                                               - ...