使用自跟踪实体生成器和 Visual Studio 2012 构建 WPF 应用程序 - 项目设置
本文介绍使用自跟踪实体生成器和 Visual Studio 2012 构建 WPF 示例应用程序的项目设置。
- 下载源文件 - 763 KB
- 请访问此 项目站点 以获取最新版本和源代码。

目录
引言
在本文中,我们将介绍一个名为“WPF/Silverlight 自跟踪实体生成器”的新版本,该版本已作为 Visual Studio 2012 扩展构建,我们将研究如何使用此扩展构建演示应用程序 SchoolSample。请注意,本文基于一篇关于 Visual Studio 2010 自跟踪实体生成器的 先前文章,并包含所有新功能和增强功能的更新。此外,我们假设我们正在使用以下体系结构构建多层应用程序
在开始之前,让我们先了解一下扩展的主要功能
- 为所有实体类自动生成
IClientChangeTracking
接口实现,以便通过每个实体对象在客户端进行更改跟踪。该接口包含AcceptChanges()
、RejectChanges()
、HasChanges
和GetObjectGraphChanges()
等方法和属性。 - 为所有 WPF 实体类自动生成
INotifyDataErrorInfo
接口(适用于 .NET 4.5)或IDataErrorInfo
接口(适用于 .NET 4.0),以及/或为所有 Silverlight 实体类自动生成INotifyDataErrorInfo
接口实现。 - 自动生成 Display 属性,并为属性和实体级别的验证逻辑自动生成验证属性。
- 可选地自动生成
ClientQuery
和ClientFilter
类实现,它们提供动态构建用于排序、分页和筛选的客户端 LINQ 查询的功能。 - 可选地为所有实体类自动生成
IEditableObject
接口实现,该接口提供用于提交或回滚对象更改(该对象用作数据源)的功能。
借助这些自动生成的功能,以及通过 Windows Identity Foundation (WIF) 进行的身份验证和授权,我们应该能够更快地构建 WPF LOB 应用程序。
但是,这并不意味着我们可以开发任何类型的 WPF 应用程序与自跟踪实体。首先,使用自跟踪实体通常意味着我们需要使用 Microsoft .NET 4.0 及更高版本开发客户端和服务器程序集。对于非 .NET 客户端,创建更改跟踪行为和使用自跟踪实体构建的 WCF 服务是一个巨大的障碍。
另一个限制是我们需要在客户端和服务器端共享完整的实体类。在不希望将实体所有属性都发送到客户端的情况下,我们可能需要开发一个应用程序,其中一部分数据模型使用自跟踪实体,而剩余部分使用 DTO 类。
演示应用程序
演示应用程序 SchoolSample 是一个使用 MVVM(MVVM Light Toolkit)、WPF/Silverlight 自跟踪实体生成器和 MEF 构建的 WPF 应用程序。这个简单的应用程序允许用户添加/删除/更新学生、讲师或课程及其注册信息。保存按钮保存对当前选定项目的更改,取消按钮取消对该项目的任何更改。保存所有按钮遍历整个列表并保存每个项目的更改,取消所有按钮遍历并取消所有项目的更改。此示例未显示如何使用 WIF 进行身份验证和授权。有关 WIF 的信息,您可以查阅 Vittorio Bertocci 的著作《Programming Windows Identity Foundation》。
系统要求
为了构建演示应用程序,我们需要
支持的操作系统
- Windows 7、Windows 8、Windows Server 2008 R2 或 Windows Server 2012
其他要求
- Microsoft SQL Server 2008、2008 R2 或 2012
- Microsoft Visual Studio 2012
- WPF/Silverlight 自跟踪实体生成器 v2.1 (VS2012 扩展)
- MVVM Light Toolkit V4 (包含在示例解决方案中)
安装
在将演示应用程序的源代码下载到本地磁盘后,我们需要完成以下两个步骤
安装 VS2012 扩展
首先,我们需要从项目站点的下载部分下载 WPF/Silverlight 自跟踪实体生成器安装程序。解压其内容,然后运行安装包。

此 Visual Studio 扩展安装程序会将以下扩展添加到 Visual Studio 2012 中,您可以通过“工具”->“扩展和更新…”进行验证,如下图所示。

Visual Studio 扩展 C# WPF 和 SL 自跟踪实体生成器是一个 C# 实体框架项目项,用于为 WPF/Silverlight 应用程序生成自跟踪实体类。
安装示例数据库
要安装演示数据库,请运行包含在下载源代码中的 SQL 脚本 *School.sql*。此脚本将创建我们演示应用程序所需的 SCHOOL 数据库架构。

构建和运行示例
完成以上两个安装步骤后,我们就可以开始构建和运行演示应用程序了。请仔细检查项目 *SchoolSample.Wcf* 中的 *Web.config* 文件的 connectionStrings
是否指向您新创建的数据库。当前设置如下:
<connectionStrings>
<add name="SchoolEntities" connectionString="metadata=res://
*/EntityModel.SchoolModel.csdl|res://*/EntityModel.SchoolModel.ssdl|res://
*/EntityModel.SchoolModel.msl;provider=System.Data.SqlClient;
provider connection string="data source=localhost;initial catalog=SCHOOL;
integrated security=True;multipleactiveresultsets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
</connectionStrings>
当演示编译并成功运行时,我们应该能够看到这个 WPF 应用程序运行,如下图所示。

架构
解决方案结构
在演示的解决方案文件中,项目被组织到几个解决方案文件夹中。*Client* 文件夹包含所有最终构建并作为客户端 WPF 演示应用程序运行的项目,而 *Server* 文件夹则包含所有提供 WCF 服务并在 Web 服务器环境中运行的项目。接下来,让我们简要回顾一下每个项目的主要功能

对于 Server 文件夹中的项目:
- 项目 *SchoolSample.Data.Wcf* 包含服务器端的自动生成实体类、资源文件以及每个实体类的任何自定义验证逻辑。
- 项目 *SchoolSample.Wcf* 是主要的服务器端项目,包含 WCF 服务类,它通过项目 *SchoolSample.Data.Wcf* 中的实体类查询和更新 SCHOOL 数据库。
对于 Client 文件夹中的项目:
- 项目 *SchoolSample.Common* 包含所有在其他客户端项目之间共享的通用类和接口。
- 项目 *SchoolSample.Data* 是项目 *SchoolSample.Data.Wcf* 的客户端对应项目,存储指向自动生成的自跟踪实体类、资源文件以及项目 *SchoolSample.Data.Wcf* 中任何自定义验证逻辑的文件链接。
- 项目 *SchoolSample.WCFService* 包含项目 *SchoolSample.Wcf* 中的
SchoolService
类的服务代理类。 - 项目 *SchoolSample.Model* 定义了此演示应用程序所有 ViewModel 类所需的
SchoolModel
类。 - 项目 *SchoolSample.ViewModel* 包含所有 ViewModel 类,例如:
MainPageViewModel
StudentPageViewModel
InstructorPageViewModel
CoursePageViewModel
项目 SchoolSample.Data.Wcf
接下来,让我们仔细看看服务器端项目 *SchoolSample.Data.Wcf*。

文件夹 *EntityModel* 包含 ADO.NET 实体数据模型 EDM 文件以及由 WPF/Silverlight 自跟踪实体生成器创建的三个 T4 模板文件。*Validation* 文件夹包含在实体类上定义的所有自定义验证逻辑,*Resource* 文件夹则存放了实体类和验证函数所需的资源文件。
要添加三个 T4 模板文件,我们首先打开文件 *SchoolModel.edmx*,然后右键单击并选择“添加代码生成项…” 。

接下来,我们将看到“添加新项”对话框。选择“WPF/Silverlight 自跟踪实体生成器”,在“名称”字段中键入“*SchoolModel.tt*”,然后单击“添加”按钮。

这将引导我们进入第二个对话框,我们在其中需要输入实体类命名空间“SchoolSample.EntityModel
”,选择是否生成可选功能,以及是否为 WPF、Silverlight 或两者都生成代码。单击“确定”后,将创建三个 T4 模板文件,这些 T4 模板文件将基于 *SchoolModel.edmx* 自动生成所有自跟踪实体类。

项目 SchoolSample.Data
项目 *SchoolSample.Data* 包含指向自动生成的自跟踪实体类、资源文件以及项目 *SchoolSample.Data.Wcf* 中任何自定义验证逻辑的文件链接。

为了设置项目 *SchoolSample.Data*,我们首先打开项目 *SchoolSample.Data.Wcf* 的文件 *SchoolModel.edmx* 并选择其设计图面。从*属性*窗口中,选择“STE 设置”,如下图所示。

接下来,我们将看到“STE 设置”对话框,我们在其中可以选择设置客户端项目 *SchoolSample.Data* 所需的所有设置。

在对话框中做出选择后,“更新”按钮将可用,单击该按钮即可完成项目 *SchoolSample.Data* 的设置。

如果您想知道单击更新按钮时实际执行了哪些操作,以下是任务列表:
- 对于客户端项目 *SchoolSample.Data*,验证模型类文件夹和验证文件文件夹是否不同。
- 验证资源命名空间是否有效。
- 向客户端项目 *SchoolSample.Data* 添加最少的必需引用。
- 如有必要,为服务器项目 *SchoolSample.Data.Wcf* 创建验证文件文件夹。
- 如有必要,为服务器项目 *SchoolSample.Data.Wcf* 创建资源文件文件夹。
- 如有必要,为客户端项目 *SchoolSample.Data* 创建模型类文件夹。
- 如有必要,为客户端项目 *SchoolSample.Data* 创建验证文件文件夹。
- 如有必要,为客户端项目 *SchoolSample.Data* 创建资源文件文件夹。
- 向客户端项目 *SchoolSample.Data* 添加条件编译符号“WPF”。
- 对 T4 模板文件运行自定义工具。
- 从服务器项目 *SchoolSample.Data.Wcf* 向客户端项目 *SchoolSample.Data* 创建 T4 模板文件链接。
- 从服务器项目 *SchoolSample.Data.Wcf* 向客户端项目 *SchoolSample.Data* 创建验证文件链接。
- 从服务器项目 *SchoolSample.Data.Wcf* 向客户端项目 *SchoolSample.Data* 创建资源文件链接。
总结
在本文中,我们介绍了 Visual Studio 2012 扩展“WPF/Silverlight 自跟踪实体生成器”以及构建和运行 SchoolSample 演示应用程序所需的所有环境设置步骤。
希望本文对您有所帮助。请在此处评分和/或留下您的反馈。谢谢!
历史
- 2012 年 8 月 - 初始发布
- 2012 年 10 月 - 源文件更新
- 2013 年 2 月 - 更新至 2.1.3 版本
- 2013 年 3 月 - 更新至 2.1.4 版本