微软 Entity Framework 实体框架工具 - EF Power Tools

来源:互联网 发布:科瑞物业软件 编辑:程序博客网 时间:2024/06/06 03:14

原文:http://msdn.microsoft.com/en-us/data/jj593170.aspx

本分步演练演示了你可以使用EF Power Tools完成的任务。EF Power Tools提供了一个,我们考虑将其增加到未来发布的主要实体框架工具集中的功能预览。

 

命令概述

在你安装EF Power Tools后,下面的上下文菜单项是可用的:

当你在一个C#项目上右点,你会看到:

  • Reverse Engineer Code First -生成继承自DbContext的类,POCO类,以及一个现存数据库的代码优先映射类
  • Customize Reverse Engineer Templates -增加缺省的反向工程T4模板到你的项目,以便你可以自定义代码生成。

当你在包含一个继承自DbContext的类的文件上右点,你会看到:

  • View Entity Data Model(Read-only) -在EF设计器中,显示一个只读的代码优先模型视图。
  • View Entity Data Model XML -显示描述相关的代码优先模型的EDMX XML文件。
  • View Entity Data Model DDL SQL -显示相应于在相关的EDM模型中的SSDL的DDL(数据定义语言)SQL。
  • Generate Views -使用EF运行时生成预编译视图,以改善启动性能。

当在一个EDMX文件上右点时(当你使用EF设计器工作时生成),你会看到:

  • Generate Views –同前描述。

 

先决条件

要完成这个演练,你需要安装:

  • Visual Studio 2012 or Visual Studio 2010
  • 安装最新版的EF Power Tools,来自Visual Studio Gallery。
  • School示例数据库

译注:如果你已经安装了以前的EF Power Tools版本,你可能需要首先从Visual Studio中卸载以前的版本,才能安装此最新的EF Power Tools版本。打开Visual Studio,指向菜单项Tools -〉Extention Manager,打开Extention Manager对话框,在Installed Entensions类别中,找到EF Power Tools以前的版本,单击Unistalled,卸载以前的版本。


创建应用程序

本演练使用Visual Studio 2012.

  • 打开Visual Studio
  • File -> New -> Project…
  • 选择Windows模板类别和Console模板项目
  • 键入EFPowerToolsSample作为项目名称
  • 选择OK

 

Reverse Engineer Code First - 反向工程代码优先

反向工程代码优先命令用于生成基于现存的数据库的POCO,映射(配置),以及继承自DbContext的类。

  • 右点项目,选择Entity Framework –> Reverse Engineer Code First。
  • 键入你想要反向工程的现存数据库的信息

    注释:这将反向工程在数据库中的所有数据表,因此如果你不希望是全部,你必须从模型中手动删除它们。

你可以在Visual Studio的状态条看到反向工程过程的进度。过程完成时,将对你的项目做出下面的更新。

  • 用连接串更新配置文件(.config)
  • EntityFramework NuGet包的引用被增加到项目中
  • 一个DbContext的继承类和一套POCO类被生成在Models文件夹下面。同样映射类被生成在内嵌在Models文件夹的Mapping文件夹下面。

在出事代码生成后,重新运行该命令将重写已经生成的文件。

如果你对这种方式生成的类不完全满意,你可以在生成后直接编辑类,或者使用在后文描述的Customize Reverse Engineer Templates命令。

 

Customize Reverse Engineer Templates - 自定义反向工程模板

在某些情况下,你可能想要去改变代码生成的方式。例如,生成的代码使用Fluent API配置模型(如下所示),但你可能想要使用Data Annotations代替。

本节剩下的部分将演示,如何修改代码生成,以便表\列映射使用Data Annotations配置,以代替Fluent API(如下所示)。

  • 右点项目,选择Entity Framework –> Customize Reverse Engineer Templates

    选择Customize Reverse Engineer Templates,增加T4模板到你的项目。EF Power Tools随后将使用这些模板来生成代码,为你的上下文,实体,和映射类。



    注释:你可能会看到下面的,由于Visual Studio试图去验证模板而引起的错误。因为模板从未在你的项目中运行过,你可以忽略它。


    Compiling transformation: The type or namespace name ‘EfTextTemplateHost’ could not be found (are you missing a using directive or an assembly reference?)

现在是时候可以编辑模板了。

  • 打开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 文件
    我们现在讲增加Data Annotation映射,包含[Table]和[Column]特性。我们将基于刚刚删除的Fluent API创建ata Annotation代码。当然你可以进一步地修改它。
  • 粘贴以亮灰色显示的代码行后面的代码(以黑体显示)去增加[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语句,以指定Data Annotations是在哪里定义的。在目前的Entity Framework版本中,被定义在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文件
  • 执行 Reverse Engineer Code First命令

译注:另一个开发者最常使用的自定义的,为生成的实体类增加 [Serializable] 特性,以使能POCO类可以直接存储在类似Web应用的应用程序、会话、ViewState或数据缓存中。你只需修改 Entity.tt 文件,在POCO类定义生成代码前增加 [Serializable]。


查看实体数据模型

当你在包含DbContext继承类定义的文件上右点时,你可以看到三个描述在下节的EDM查看选项。

View Entity Data Model (Read-only) - 查看实体数据模型(只读)

即使在使用代码优先进行开发工作时,你也可能希望图形化地查看你的模型。View Entity Data Model选项在EF设计器显示一个只读的代码优先模型视图。尽管这设计允许你修改模型,你也不能够保存这些改变。

View Entity Data Model XML - 查看实体数据模型XML

该选项允许你查看描述相关的代码优先模型的EDMX XML数据。你可能不会在大多数场合使用这个选项。一种情况是,当调试某些代码优先问题是,你可能需要使用它。

View Entity Data Model DDL SQL - 查看实体数据模型DDL(数据定义语言)SQL

该选项允许你查看,在相关的EDM模型中的,相应于SSDL的DDL(数据定义语言)SQL脚本。

 

Generating Pre-compiled Views - 生成预编译视图

你可以使用 Generate Views 选项生成,由实体框架运行时使用的,用于改善启动性能的预编译视图。生成的视图文件被增加到项目中。你可以在下述文章: Performance Considerations,阅读更多的有关视图编译的内容。

Generate Views 选项在使用代码优先和使用EF设计器的时候都是可用的。

  • 当使用代码优先时,可以在包含DbContext继承类的文件上右点,使用 Generate Views 选项。
  • 当使用EF设计器时,可以右点EDMX文件,使用 Generate Views 选项。

注意,每次你改变你的模型,你需要通过再次运行 Generate Views 命令,重新生成预编译的视图。

原创粉丝点击