使用 CodeFluent Entities 从现有数据库生成 JSON Web 服务





5.00/5 (8投票s)
本文将介绍如何使用 CodeFluent Entities 从现有数据库生成基于 JSON 的 Web 服务层。我们还将通过“导入向导”生成一个 Web 客户端后台管理系统。
CodeFluent Entities 是什么?
CodeFluent Entities 是一款集成到 Visual Studio 2008/2010/2012 的独特产品,它允许开发人员生成组件,例如 脚本 (如 T-SQL, PL/SQL, MySQL, Pg/SQL)、 代码 (如 C#, VB)、 Web 服务 (如 WCF, JSON/REST) 和 UI (如 ASP.NET, SharePoint, WPF)。
代码生成过程是 模型优先且持续的:从您的声明式模型中,将推断出一个元模型,然后 代码生成器 将把它翻译 成代码。提供超过 20 种“开箱即用”的代码生成器(也称为“生产者”),您可以组合它们来创建符合您所需架构、使用您所需技术的应用程序。
更多信息请访问 http://www.softfluent.com/products/codefluent-entities
SoftFluent 是谁?
SoftFluent 是一家创新的公司,致力于在 .NET 平台 上工业化数据驱动应用程序的软件开发。
SoftFluent 是一家由微软资深人士、微软咨询服务前顾问于 2005 年创立的创新软件公司。SoftFluent 是顶级的 Visual Studio 行业合作伙伴 & 微软金牌认证合作伙伴。它利用其在构建企业级应用程序方面的丰富经验,创建了一个为 微软平台 优化的 模型优先代码生成器。
更多信息请访问 http://www.softfluent.com/about-us
常见场景
假设我们面临以下场景:
- 我们有一个数据库,希望通过基于 JSON 的 Web 服务层来暴露它,该服务层提供 CRUD (创建、读取、更新和删除) 操作。
- 我们还需要构建一个 后台管理系统 来管理和维护来自我们数据库的数据。
- 将来,我们可能需要以不同的方式访问我们的数据库,例如从 Smart Client 或暴露基于 SOAP 的 Web 服务层(总会有新的想法)。
- 我们需要尽快部署此系统。
让我们开始吧,我们需要做的是:
- 构建一个能够加载数据、创建新数据、更新和删除现有数据的访问层(并确保其正常工作)。
- 管理数据验证(并确保其正常工作)。
- 构建一个基于 JSON 的 Web 服务层。
- 构建所有必需的服务契约和操作。
- 配置我们的服务契约以支持 JSON。
- 托管我们的服务。
- 确保其正常工作。
- 构建一个基于 Web 的客户端(并确保其正常工作)。
- 奠定基础,以便支持任何可能的演变。
- 以及我可能遗漏的一切。
或者……我们可以使用 CodeFluent Entities 来处理这些“管道工程”,并确保 它能正常工作。
本次演示需要什么?
为了跟随本次演示,您将需要:
- Visual Studio 2008/2010/2012
- SQL Management Studio 2008/2012
- CodeFluent Entities。您可以在此处获取无限期、功能齐全且免费的个人许可证 http://www.softfluent.com/products/codefluent-entities/
- Adventure Works 示例数据库。下载和安装过程将在下方展示。
本次演示将使用以下工具进行
- Visual Studio 2012 Update 1
- SQL Server 2012 的 SQL Management Studio
- CodeFluent Entities Build 61214.691
- Adventure Works 2012 的轻量级版本 (AdventureWorksLT2012_Database.zip) http://msftdbprodsamples.codeplex.com/downloads/get/478215
首先,我们需要安装 Adventure Works 示例数据库。您可以在此链接找到 2008 版和 2012 版 http://msftdbprodsamples.codeplex.com/releases/view/93587。我们将使用示例数据库的轻量级版本(AdventureWorksLT20XX_Database.zip)。
您不必一定使用 Adventure Works 数据库,可以使用任何您想要的数据库,但您需要根据您自己的情况调整本次演示中的某些步骤。
下载数据库 .zip 文件后,将其解压,您应该会找到两个文件。
打开 SQL Management Studio 并附加数据库。
然后单击“添加”按钮并按照说明操作。确保 SQL Management Studio 有权加载您的文件(您可以以管理员身份运行 SQL Management Studio)。
如果您在附加数据库时遇到问题,可以在此处找到帮助:http://msdn.microsoft.com/en-us/library/ms190209(v=sql.110).aspx
安装 CodeFluent Entities 非常简单。请从这里开始:http://www.softfluent.com/products/codefluent-entities/download
让我们开始吧
下载并安装 CodeFluent Entities 后,打开 Visual Studio(2008 / 2010 / 2012)并创建一个新项目。您会找到一个名为“CodeFluent Entities”的新项目模板类别。在本演示中,我们将选择“Import Started Wizard”项目模板,并为我们的解决方案命名,我将它命名为“AdventureWorksDemo”。
我们向导的第一步是选择“importer”类型,这意味着我们需要选择我们的数据来源。
正如您所见,CodeFluent Entities 提供了广泛的数据导入选项,例如 Microsoft Access、Microsoft SQL Server、MySQL、Oracle 数据库、PostgreSQL 数据库等。
我们将选择“Microsoft SQL Server 2000 或更高版本数据库”导入器。
现在,我们只需要提供 SQL Server 数据库的连接字符串,在我的例子中,它看起来是这样的:
server=(local);database=AdventureWorksLT2012;Integrated Security=true
您可以导入整个数据库,也可以只导入特定的一组表。
如果您愿意,可以保存您的导入配置以备将来使用。
现在我们需要选择一个目标架构。
这是一个非常有趣的步骤,我们可以看到 CodeFluent Entities 可以生成的一些内置架构,当然,您也可以通过创建自定义 CodeFluent Entities 项目并包含您相关的生产者集来想象您自己的架构。
本次演示我们将选择 ASP.NET Ajax/Json 架构。这将创建一个 N 层架构,其中 Web 客户端应用程序作为用户界面,使用 jQuery/jqGrid 和 JSON 自动 Web 服务。
然后我们必须选择 C# 或 VB.NET 作为我们的目标领域对象语言。
然后我们需要选择一个持久化层。
我们可以选择与我们导入的数据库相同的数据库,也可以告诉 CodeFluent Entities 创建一个新数据库。使用不同的数据库将非常有用,例如如果我们计划将数据库从一种技术迁移到另一种技术,例如,我们可以轻松地将 Access 数据库或 MySQL 数据库迁移到 Microsoft SQL Server 数据库。
本次演示我们将使用已导入的数据库作为持久化层,因此我们将使用与之前相同的连接字符串。
下一步显示了我们的“Import Starter Wizard”将执行的操作。
当我们单击“Next”或“Finish”时,CodeFluent Entities 将开始生成一个包含我们应用程序所需所有项目的 Visual Studio 解决方案。
最后,我们收到了一个关于解决方案生成的详细报告。
让我们看一下我们的 Visual Studio 解决方案。
我们这里有什么?
- 一个空的 C# 类库项目。该项目将托管我们的 业务对象模型 (BOM),以及我们的服务契约和服务实现。
- 一个 ASP.NET Web 项目,它将扮演双重角色:包含我们的 Web 客户端并托管我们的 JSON Web 服务。
- 一个 CodeFluent Entities 项目,其中包含我们的实体模型和一套 生产者 ,对应我们架构的每一层。
- 一个空的 SQL Server 项目,用于存储持久化层的 SQL 脚本。
目前,所有项目都采用标准的 Visual Studio 项目模板。我们需要“告诉”CodeFluent Entities 项目生成每个项目的内容,这通过“构建”CodeFluent Entities 项目来完成,但在此之前,让我们先看看它。
CodeFluent Entities 项目
CodeFluent Entities 项目看起来是这样的。
从上到下,主要元素是:
- Surfaces:我们实体模型的设计表面,称为“Modeler”。
- Parts:我们 实体模型 的 XML 表示。
- Producers:我们应用程序的每一层将由一个生产者生成。
- Model:一个 推断 出的模型表示,包含所有相关信息(实体、属性、方法、关系、规则…)。
让我们仔细看看不同的生产者:
- SQL Server Producer:该生产者将生成并执行所有 SQL 脚本 ,其中包含 CodeFluent Entities 用于在持久化层加载和更新数据的 存储过程 。这些脚本将存储在 SQL Server 项目(
AdventureWorksDemo.Persistence
)中。 - BOM Producer:它将生成我们的 业务对象模型 ,这意味着,所有 C#/.NET 类都包含与我们的模型相同的逻辑(实体、属性、规则、方法…)。这些类主要可以用于 CRUD (创建、读取、更新和删除)。
- Service Producer:这是 BOM 的一个子生产者,它代表一个基于 JSON 的服务层。
- ASP.NET Ajax Producer:该生产者将使用 jQuery 和 jqGrid 生成我们的 Web 客户端。目标项目将是
AdventureWorksDemo.Client
。
让我们打开默认的模型表面(双击 Surface > Default 树项)。这将打开模型表面。
顶部是 CodeFluent Entities Ribbon ,允许我们对模型执行多种操作。在模型表面上,有一个表示我们导入数据库的实体。它不是关系模型也不是 UML 图,而是一个面向模型的表示,它依赖于实体、属性、关系、规则、属性、方法等概念。
在构建我们的 CodeFluent Entities 项目之前,我们将配置我们的 SQL Server Producer,使其不更新原始数据库架构,而仅创建 CodeFluent Entities 存储过程。为此,请双击 SQL Server Producer 项。
SQL Server Producer 属性窗口弹出,选择“Advanced Properties”按钮。
现在显示“Advanced Properties”。确保“Update Schema”属性设置为 false,并且“Update Procedures”属性设置为 true (默认值)。
现在是时候构建我们的 CodeFluent Entities 项目了。右键单击 CodeFluent Entities 项目(AdventureWorksDemo.Model
)并单击“Build”。CodeFluent Entities 将生成与每个生产者相关的所有代码。Visual Studio Output 窗口显示了 CodeFluent Entities 在执行每个生产者时的进度。
如果您查看解决方案,您会发现 CodeFluent Entities 生成了大量代码。
结果
现在您拥有:
- 一个业务 对象模型 ,它管理所有数据访问方面,提供加载、创建、更新和删除数据的 [方法]。
- 一个基于 JSON 的 Web 服务层,任何应用程序都可以访问。
- 一个基于 Web 的 后台管理系统 ,用于管理您的所有记录。
并且您编写了 零行代码。一切都 100% 可用 且完全可扩展。
探索完整的生成的后台管理 Web 应用程序
在您的网站项目(AdventureWorksDemo.Client
)中,您可以添加对 BOM 项目(AdventureWorksDemo
)的引用。
如果需要,您现在可以将您的网站部署到 IIS 或使用集成的 Visual Studio 开发服务器(在 Visual Studio 2012 中:右键单击您的 Web 项目 -> Properties / Web 选项卡 -> Servers -> Use Visual Studio Development Server)。
将网站项目设置为启动项目(右键单击 AdventureWorksDemo.Client -> Set As StartUp Project)。
只需按 F5 即可!您可能会看到一个完全生成的后台管理系统,它使用 Ajax/jQuery/jqGrid 构建,允许您管理您的记录。
如果您在使用 Visual Studio 2012 首次启动您的网站时遇到问题,您可能会遇到一个错误。
The type or namespace name 'Optimization' does not exist in the namespace 'System.Web'
有一个非常简单的解决方案可以解决它:
- 打开您网站项目中的 web.config 文件。
- 找到引用 System.Web.Optimization 命名空间的行,并像这样将其注释掉:<!--<add namespace="System.Web.Optimization" />-->
现在您可以加载、创建、更新和删除数据库中的任何记录。
探索基于 JSON 的 Web 服务层
ASP.NET Ajax/jQuery Web 客户端使用 CodeFluent Entities 生成的 JSON Web 服务。
我们的 Web 服务 托管 在我们的网站应用程序中,您可以找到与我们模型中的实体数量一样多的“.svc”文件。
这些服务是 标准的 WCF 服务 ,我们可以在 BOM 项目(AdventureWorksDemo
)的 {namespace}\Services 文件夹下找到服务契约和服务实现,例如 SalesLT\Services。
这是一个 服务契约 接口的示例,我们可以看到 CodeFluent Entities 添加了合适的 属性 ,使我们的服务 符合 JSON 标准。
我们只需要测试我们的服务。为此,我们将向解决方案添加一个 控制台应用程序 项目。
在 Program.Main 方法中,我们将调用例如“Customer service”并验证它是否正常工作。
验证下面使用的 URI 是否与您的网站 URL 匹配。
static void Main(string[] args)
{
string uri = "https://:20121/Services/SalesLT/Customer.svc/LoadAll";
using (WebClient client = new WebClient())
{
//We need to specify that we are sending Json contents, or our
//requests will be rejected by the services
client.Headers.Add("Content-Type: json; charset=UTF-8");
client.Encoding = System.Text.Encoding.UTF8;
try
{
string response = client.UploadString(uri, "");
Console.WriteLine(response);
}
catch (WebException ex)
{
WebResponse errorResponse = ex.Response;
using (Stream responseStream = errorResponse.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, new System.Text.UTF8Encoding());
String errorText = reader.ReadToEnd();
Console.WriteLine(errorText);
}
throw;
}
}
Console.ReadLine();
}
确保您的 Web 应用程序正在运行,然后运行您的控制台应用程序项目(AdventureWorksDemo.ConsoleTest
),方法如下:右键单击项目,Debug/Start new instance。
您可能会看到一个漂亮的黑白控制台,显示半人类可读的 JSON 文本。重要的是要知道 我们的服务工作正常。
关于更改?
您可能希望让您的项目 演进 ,例如:
- 向您的模型添加新实体。
- 为特定实体属性指定业务验证规则。
- 为一或多个实体构建一个精简视图。
- 本地化您的应用程序。
- 提供基于 SOAP 的 Web 服务 API。
- 创建 Windows Phone 应用程序。
- 创建 Silverlight 或 WPF 智能客户端。
- 设置 MVC 网站。
- ...
您对模型所做的任何更改都将 传播 到您应用程序的每个 层 。CodeFluent Entities 为每个功能提供 默认配置 ,这些配置可以 扩展 和 自定义 以满足您的需求。
CodeProject 会员优惠
资源
CodeFluent Entities 是一款成熟的 7 年产品,您可以在此处找到各种资源,并找到您想了解的关于 CodeFluent Entities 的所有信息。
- CodeFluent Entities 页面: http://www.softfluent.com/products/codefluent-entities
- 下载 链接: http://www.softfluent.com/products/codefluent-entities/download
- 网络广播: http://www.softfluent.com/community-support/codefluent-entities/webcasts
- 文档: http://www.softfluent.com/documentation/
- 论坛: http://forums.softfluent.com/
- 博客: http://blog.codefluententities.com/
- 自学视频: http://www.softfluent.com/media---codefluent-entities-step-by-step-training
- SoftFluent 网站: http://www.softfluent.com/