如何:自定义对象层代码生成(实体数据模型设计器)
本主题描述如何使用 ADO.NET 实体数据模型设计器(实体设计器)和文本模板自定义对象上下文和实体类(对象层代码)的生成。
默认情况下,实体设计器使用 EntityModelCodeGenerator 自定义工具生成对象层代码(有关更多信息,请参见生成的代码概述(实体数据模型设计器))。 向项目添加文本模板时,实体设计器可以使用该模板生成对象层代码,而不使用默认的自定义工具。
注意: |
---|
您可以搭配使用命令行工具和文本模板生成对象层代码。有关更多信息,请参见文本模板的命令行工具(可能为英文网页)。 |
Visual Studio 提供两个用于生成实体框架对象层代码的 ADO.NET 模板:“ADO.NET EntityObject 生成器”和“ADO.NET 自跟踪实体生成器”。 **“ADO.NET EntityObject 生成器”**生成的代码与 EntityModelCodeGenerator 自定义工具生成的代码相同。 **“ADO.NET 自跟踪实体生成器”**模板生成包含自跟踪状态逻辑的实体类。 使用 N 层应用程序时使用自跟踪实体。 有关 ADO.NET 模板的更多信息,请参见 ADO.NET EntityObject 生成器模板和ADO.NET 自跟踪实体生成器模板。
以下过程假定:
您在 Visual Studio 2010 中打开了面向 .NET Framework 4 的 Visual Basic 或 C# 项目。
您使用实体设计器打开了 .edmx 文件。
您熟悉如何自定义文本模板。 有关文本模板的信息,请参见生成项目(可能为英文网页)。
自定义对象层代码生成
右击实体设计器图面的空白区域,指向**“添加代码生成项”,然后选择可用的模板。 如果没有显示任何可用的模板,则在“已安装的模板”窗格中选择“代码”**。
代码生成项将向项目添加一个或多个文本模板 (.tt) 文件。 文本模板将生成对象层代码。 在 .tt 文件下添加生成的文件。 如果不修改此模板,生成的代码将与实体设计器生成的代码相同。
向项目添加文本模板时,Visual Studio 执行以下操作:
将概念模型的**“代码生成策略”属性设置为“无”**。 这将关闭默认代码生成。
在 .edmx 文件所在的目录中向项目添加新文本模板文件。
将相对于文本模板的 .edmx 文件路径插入到文本模板。 这样做的目的是为了确保该文本模板处理的是正确的 .edmx 文件。
基于 .edmx 文件使用文本模板生成代码。 生成的代码将写入
<text_template_name>.cs
或<text_template_name>.vb
文件中。 此代码文件将作为该模板文件的依赖文件添加在**“解决方案资源管理器”**中。
打开文本模板并进行编辑。
保存编辑后的文本模板文件。
在保存该文本模板文件时,会根据编辑后的文本模板文件重新生成对象层代码。
默认情况下,只要保存 .edmx 文件,就会触发 .edmx 文件的对象层代码生成操作。 不保留对 <text_template_name>.cs
或 <text_template_name>.vb
代码文件所做的任何手动更改。 如果一个 .edmx 文件有多个文本模板文件与其关联,则保存 .edmx 文件时会重新生成所有关联的代码文件。 但是,可以更改这种行为。 如果将概念模型的**“保存时转换相关的文本模板”**属性设置为 false,保存文件时将不会重新生成代码文件。
在将模型和 .tt 文件拆分成单独的项目时,只要修改了 .edmx 文件或 .tt 文件就应手动运行代码生成。 通过单击解决方案资源管理器中的**“转换所有模板”**按钮可执行此操作。 Walkthrough: Serialize Self-Tracking Entities主题演示如何将模型和 .tt 文件拆分成单独的项目。