原文: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设计器工作时生成),你会看到:
先决条件
要完成这个演练,你需要安装:
译注:如果你已经安装了以前的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命令,重新生成预编译的视图。
分享到:
相关推荐
If you are looking for Reverse Engineeering tools, I recommend using the EF Reverse POCO Generator Template. You can also use the less advanced "Code First from Database" feature that is included with...
Summary Entity Framework Core in Action teaches you how to access and update relational data from .NET applications. Following the crystal-clear explanations, real-world examples, and around 100 ...
entity framework 4 in action - source code
Entity Framework 6 (EF6) is a tried and tested object-relational mapper (O/RM) for .NET with many years of feature development and stabilization.
EntityFramework领域驱动模型-陈晴阳大哥的文章.pdf
Reading and storing data is a core part of any application, and .NET developers ...Entity Framework Core in Action teaches developers how to add database functionality to .NET applications with EF Core.
Entity Framework Core Cookbook - Second Edition by Ricardo Peres English | 9 Nov. 2016 | ISBN: 1785883305 | 340 Pages | MOBI/EPUB/PDF+Code Files | 6.2 MB Entity Framework is a highly recommended ...
替换C:\Users\xxxxx\.nuget\packages\z.entityframework.extensions.efcore\2.1.49\lib\netstandard2.0下的Z.EntityFramework.Extensions.EFCore.dll。适用于.net core的ef,解除了1个月使用的限制。
学习Entity_Framework_实体框架
Entity Framework学习初中高级篇-博客园cnblogs.rar
Entity Framework试水系列-博客园cnblogs.rar
Z.EntityFramework.Extensions 破解 注册机,详细破解方法
Entity_Framework_6_Power_Tools_Community_Edition_v0.9.126
Entity Framework provides a model-based system that makes data access effortless for developers by freeing you from writing similar data access code for all of your domain models. Mastering Entity ...
如果使用Entity Framework也用了Z.EntityFramework.Plus.EF6且同时使用Entity Framework Profiler或MiniProfiler监控EF生成的SQL,你可能会遇到他们不兼容的问题,原因是Z.EntityFramework.Plus.EF6识别数据库类型...
Understand the core concepts of Entity Framework Core, as well process models for existing databases (reverse engineering) and the generation of database schemas from object models (forward ...
asp.net 3.5+entity framework实体框架三层实体一.
Z.EntityFramework.Extensions.EFCore 破解 ,支持.NET Core 3.1批量插入数据,速度很快。
EntityFramework 执行过程分析工具,可完美看到执行的语句,支持EFCore