学习使用ADO.NET Data Services (ADO.NET 数据服务框架) - Part 1
学习使用ADO.NET Data Services (ADO.NET 数据服务框架)
ADO.NET Data Services Framework是在.NET Framework 3.5 SP1新推出的扩充功能,这个功能和概念在以前的.NET 1.0-.NET3.5 技术中都没有出现的新概念,它主要用途是可以很容易的将数据库服务公开在网络上,然后透过URL网址就可以对数据库进行CRUD的操作。ADO.NET Data Services能通过一个REST化的方式将数据以Web上的数据服务展示。使得应用可以以数据服务的方式展现数据,然后被应用在企业网络和互联网上的 Web客户端中。
REST (Representational State Transfer) 用最单纯的 URL 网址,就让一般客户、应用程序能直接访问、写入远程主机上的数据库。此外,微软实现 REST 的 ADO.NET Data Services,亦有一套安全控管、存取权限控管的机制,不必担心安全性的问题。
在 .NET 平台方面,未来的 .NET Framework 4.0 及 Visual Studio 2010,仍有 ADO.NET Data Services Framework 2.0 的版本,也有新的 4.0 版的 System.Data.Services 类库。
在我的博客网站 (http://blog.entlib.com/entlibforum ) 将演示如何在n-tier 应用程序中使用ADO.NET Data Servers,不过本文将重点介绍ADO.NET Data Services 的入门部分。按照如下具体操作来完成整个练习。
File > New Project > ASP.NET Web Application....
通过VS 2008 SP1 创建一个ADO.NET Data Service 是很容易的,第一步创建一个ASP.NET Web Application 项目:
上述将创建一个带有default.aspx 页面的ASP.NET 项目。如果你仅仅需要创建service,你可以删除default.aspx 文件。接着增加一个新的item到项目中,选择ADO.NET Data Service。
在本实例中我们采用了SubtextData 数据库(http://blog.entlib.com/ 开源博客平台的后台数据库),因此这里对ADO.NET Data Service 命名为 SubtextData.svc。上述步骤将自动添加System.Data.Services 和System.Data.Services.Client 到项目中。右键点击SubtextData.svc 文件,选择”设置为起始页”选项。
上述步骤自动创建的SubtextData.svc.cs 文件如下,SubtextData 类继承DataService类:
namespace MyDataService
{
public class SubtextData : DataService< /* TODO: 在此放置数据源类名*/ >
{
// 仅调用此方法一次以初始化涉及服务范围的策略。
public static void InitializeService(IDataServiceConfiguration config)
{
// TODO: 设置规则以指明哪些实体集和服务操作是可见的、可更新的,等等。
// 示例:
// config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead);
// config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
}
}
}
增加Entity Data Model
增加ADO.NET Entity Data Model 到项目中,文件命名为 SubtextDataModel。然后,按照实体数据模型向导创建模型。这里,我们选择从数据库创建,并选择所有的数据表,完成向导操作。
关于ADO.NET Entity Data Model 的具体介绍,请参考如下文章:
上述过程创建IQueryable 数据源SubtextDataEntities。现在,我们返回Data Service类,并填充Class name,如下所示:
public class SubtextData : DataService< SubtextDataEntities >
设置数据模型中表的访问控制
下一步,我们需要控制数据模型中表的访问控制。允许对数据库中所有表进行读、写操作是一个糟糕的设计,因此我们需要在 DataServiceConfigration 中配置 EntitySetAccessRule,并传入给 InitializeService 方法。这是一个共享的方法,因此不管创建多少个SubtextData DataService,该方法仅运行一次。在通过Visual Studio 调试时,如果你修改了该方法的代码,你需要记得强制重新编译。
public static void InitializeService(IDataServiceConfiguration config)
{
// TODO: 设置规则以指明哪些实体集和服务操作是可见的、可更新的,等等。
// 示例:
config.SetEntitySetAccessRule("*", EntitySetRights.All);
}
上述设置允许所有人更新、插入、删除和查询模型中的所有表,可能是一个不好的设计,因此你可以调整为只读Read-only:
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
你也可以写一些额外的方法用来查询和更新数据,我们在随后的文章会进行描述,或者你也可以直接访问MSDN - http://msdn.microsoft.com/en-us/library/cc907912.aspx。
下面我们开始在 IE 浏览器通过HTTP GET 查询数据。
通过HTTP GET 查询数据
编译运行本项目,将自动打开浏览器,并列出所有在数据模型中运行方法的实体。
其中具体的端口号可能不同。
当我们想查询数据时,可以通过HTTP GET 在浏览器地址栏输入:
将返回SubtextData数据库中所有博客帖子的种子(feed)。如果你使用 IE 或者Firefox浏览器,浏览器将自动对种子应用样式表CSS,不过你可以右键点击,并查看源文件就可以看到实际返回的数据。下面仅仅显示部分返回的数据:
如果仔细一点,你会发现上述文件也返回subtext_content 到其他表之间的关联关系。例如,你可以返回subtext_content 中特定文章的评论信息:
上述链接返回subtext_content 文章(10)的所有评论列表信息。
如果你对开发RESTful Web services 感兴趣,推荐你下载 Fiddler 工具,该工具允许你监视HTTP 数据,使用Fiddler 比 IE 更方便查看数据。
欢迎继续访问 - 学习使用ADO.NET Data Services (ADO.NET 数据服务框架) - Part 2,及下载本文范例程序。