转自: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 2010
- Visual Studio 库中 EF Power Tools 的最新版本
- School Database
创建应用程序
本演练使用 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用法的更多相关文章
-
Entity Framework Code First ---EF Power Tool MySql
关于如何使用EF Power Tool的介绍请看 http://www.cnblogs.com/LingzhiSun/archive/2011/05/24/EFPowerTool_1.html, 这里 ...
-
使用 EF Power Tool Code Frist 生成 Mysql 实体
原文:使用 EF Power Tool Code Frist 生成 Mysql 实体 1,在要生成的项目上右键 2, 3, 4, 5, 生成后的效果 已知问题: 1,在Mys ...
-
Entity Framework Code First ---EF Power Tool 和MySql一起使用遇到的问题
关于如何使用EF Power Tool的介绍请看 http://www.cnblogs.com/LingzhiSun/archive/2011/05/24/EFPowerTool_1.html, 这里 ...
-
Entity Framework Code First使用者的福音 --- EF Power Tool使用记之一(转载)
好像蛮长时间没有新文章带给大家了.前几天出差再加上忙着公司里的活儿,几乎都没时间上博客园了.今天正好有些时间,为大家简单介绍EF产品组新发布的一个牛逼的小工具——EF Power Tool(翻译的话, ...
-
Entity Framework Code First使用者的福音 --- EF Power Tool使用记之二(问题探究)
转:http://www.cnblogs.com/LingzhiSun/archive/2011/06/13/EFPowerTool_2.html 上次为大家介绍EF Power Tool之后,不 ...
-
EF Power Tool 代码生成器 反向生成
大致来说,这个工具有这样几个功能: 1) 按照现有数据库结构,生成Code First POCO class.DbContext class和相应的mapping class. 2) 以designe ...
-
Entity Framework Code First使用者的福音 --- EF Power Tool使用记之一
下次会为大家深入解析这个小工具. 最先看到这个工具是在EF产品组最新的博客文章上,http://blogs.msdn.com/b/adonet/archive/2011/05/18/ef-power ...
-
【转】MVC Model建模及Entity Framework Power Tool使用
MVC如使用Code-First代码优先约定,先建实体类,再根据实体类创建数据库. 在创建实体类后,新建一个数据上下文类,如下: publicclassMusicStoreDB : DbContext ...
-
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 ...
随机推荐
-
mysql 安装和卸载
1.1 上次课内容回顾: MVC案例: * Servlet * 处理请求. * JSP * 显示数据 * JSTL+EL显示数据. * JavaBean * 封装和处理数据 * BeanUtils封装 ...
-
UVA 133 The Dole Queue(报数问题)
题意:一个长度为N的循环队列,一个人从1号开始逆时针开始数数,第K个出列,一个人从第N个人开始顺时针数数,第M个出列,选到的两个人要同时出列(以不影响另一个人数数),选到同一个人就那个人出列. 思路: ...
-
NFC(2)NFC、蓝牙和红外之间的差异
NFC(2)NFC.蓝牙和红外之间的差异表
-
使用Zencoding的升级版Emmet
最近vim7.4也更新了,zengcoding好像停止了更新,更换成emmet了,使用还是和Zencoding一样. emmet的地址在http://emmet.io/ 支持很多的编辑器和IDE. ...
-
AngularJs打造一个简易权限系统
AngularJs打造一个简易权限系统 一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJ ...
-
APP测试 - android os6,7 新增特性测试
背景 android os6,7推出后,公司的APP在市场上面反映的一些问题.初始方案在7月份已经整了一份,但是邮件发出大部分同学都看不到,这里在博客里面整理后再在部门内邮件发出来. android ...
-
MyBatis学习总结(一)简单入门案例
MyBatis学习总结(一)简单入门案例 主要内容:本文主要通过对数据库中的use表进行增删改查总结mybatis的环境搭建和基本入门使用 一.需要的jar包: 1.核心包 2.依赖包 3.jdbc数 ...
-
Dynamics CRM2011/2013 站点地图sitemap的翻译
实体.属性字段.ribbon等的翻译可以通过解决方案来解决(具体可见我前面的博客:http://blog.csdn.net/vic0228/article/details/37690913),但解决方 ...
-
SPRING事务的属性有哪些?其中,事务隔离级别有哪几种?什么情况需要使用这几种事务隔离级别?
Spring 声明式事务,propagation属性列表 PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择. PROPAGATION_SU ...
-
关于css盒子模型和BFC的理解
CSS盒子模型 包含元素内容(content).内边距(padding).边框(border).外边距(margin) 一般元素总宽度 = element的width+padding的左右边距+mar ...