`
lsjlym
  • 浏览: 21500 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

 
阅读更多

原文: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同前描述。

先决条件

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

译注:如果你已经安装了以前的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命令,重新生成预编译的视图。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics