65.9K
CodeProject 正在变化。 阅读更多。
Home

使用自跟踪实体生成器和 Visual Studio 2012 构建 WPF 应用程序 - 项目设置

starIconstarIconstarIconstarIconstarIcon

5.00/5 (14投票s)

2012 年 8 月 14 日

CPOL

8分钟阅读

viewsIcon

74434

downloadIcon

3610

本文介绍使用自跟踪实体生成器和 Visual Studio 2012 构建 WPF 示例应用程序的项目设置。

目录

引言

在本文中,我们将介绍一个名为“WPF/Silverlight 自跟踪实体生成器”的新版本,该版本已作为 Visual Studio 2012 扩展构建,我们将研究如何使用此扩展构建演示应用程序 SchoolSample。请注意,本文基于一篇关于 Visual Studio 2010 自跟踪实体生成器的 先前文章,并包含所有新功能和增强功能的更新。此外,我们假设我们正在使用以下体系结构构建多层应用程序

在开始之前,让我们先了解一下扩展的主要功能

  • 为所有实体类自动生成 IClientChangeTracking 接口实现,以便通过每个实体对象在客户端进行更改跟踪。该接口包含 AcceptChanges()RejectChanges()HasChangesGetObjectGraphChanges() 等方法和属性。
  • 为所有 WPF 实体类自动生成 INotifyDataErrorInfo 接口(适用于 .NET 4.5)或 IDataErrorInfo 接口(适用于 .NET 4.0),以及/或为所有 Silverlight 实体类自动生成 INotifyDataErrorInfo 接口实现。
  • 自动生成 Display 属性,并为属性和实体级别的验证逻辑自动生成验证属性。
  • 可选地自动生成 ClientQueryClientFilter 类实现,它们提供动态构建用于排序、分页和筛选的客户端 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

其他要求

安装

在将演示应用程序的源代码下载到本地磁盘后,我们需要完成以下两个步骤

安装 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=&quot;data source=localhost;initial catalog=SCHOOL;
integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" 
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* 是主要的客户端项目,也承载所有 UI 逻辑。
  • 项目 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* 的设置。

    如果您想知道单击更新按钮时实际执行了哪些操作,以下是任务列表:

    1. 对于客户端项目 *SchoolSample.Data*,验证模型类文件夹和验证文件文件夹是否不同。
    2. 验证资源命名空间是否有效。
    3. 向客户端项目 *SchoolSample.Data* 添加最少的必需引用。
    4. 如有必要,为服务器项目 *SchoolSample.Data.Wcf* 创建验证文件文件夹。
    5. 如有必要,为服务器项目 *SchoolSample.Data.Wcf* 创建资源文件文件夹。
    6. 如有必要,为客户端项目 *SchoolSample.Data* 创建模型类文件夹。
    7. 如有必要,为客户端项目 *SchoolSample.Data* 创建验证文件文件夹。
    8. 如有必要,为客户端项目 *SchoolSample.Data* 创建资源文件文件夹。
    9. 向客户端项目 *SchoolSample.Data* 添加条件编译符号“WPF”。
    10. 对 T4 模板文件运行自定义工具。
    11. 从服务器项目 *SchoolSample.Data.Wcf* 向客户端项目 *SchoolSample.Data* 创建 T4 模板文件链接。
    12. 从服务器项目 *SchoolSample.Data.Wcf* 向客户端项目 *SchoolSample.Data* 创建验证文件链接。
    13. 从服务器项目 *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 版本
    © . All rights reserved.