使用 ADO.NET 数据服务查询 SharePoint Foundation

上次修改时间: 2010年6月17日

适用范围: SharePoint Foundation 2010

本文内容
使用 ADO.NET Data Services 框架从客户端进行查询的优点和缺点
受支持的客户端应用程序类型
在开发服务器上安装 ADO.NET Data Services
使用 SharePoint 数据源对 ADO.NET Data Services 进行编程

本主题简要概述如何使用 ADO.NET Data Services 框架(该链接可能指向英文页面)(一种具象状态传输 (REST) Web 服务)在 Microsoft SharePoint Foundation 中查询列表数据。本主题假定您基本熟悉此框架。有关如何使用它进行编程的信息,请参阅概述:ADO.NET Data Services(该链接可能指向英文页面)使用 Microsoft ADO.NET Data Services(该链接可能指向英文页面)

您还可以使用该框架添加、修改和删除数据。

使用 ADO.NET Data Services 框架从客户端进行查询的优点和缺点

使用 ADO.NET Data Services 框架从客户端应用程序查询 SharePoint Foundation 数据的主要优点是,查询列表数据为强类型。在 SharePoint Foundation 客户端对象模型中,任意两个 ListItem 对象是同一个类型,即使它们代表完全不同种类的列表中的项。但 ADO.NET Data Services 使用的是为目标数据上下文(网站)中的每个列表创建一个类型的对象关系映射。例如,通知列表中的项的类型称为 AnnouncementsItem,而任务列表中的项的类型称为 TasksItem

使用 ADO.NET Data Services 框架从客户端应用程序中查询 SharePoint Foundation 数据的主要缺点是,您只能检索列表数据并写入列表。而无法通过 ADO.NET Data Services 访问其他类型的 SharePoint 数据。

受支持的客户端应用程序类型

几乎任何类型的客户端应用程序都可以使用 ADO.NET Data Services 访问 SharePoint Foundation 数据,包括控制台应用程序、Windows 窗体应用程序、Windows Presentation Foundation 应用程序和 Silverlight 应用程序。

在开发服务器上安装 ADO.NET Data Services

如果您的开发服务器上尚未安装 ADO.NET Data Services,请下载操作系统适用的版本:

提示提示

此服务存在一个名为"WCF 数据服务"的版本,该版本面向 Microsoft .NET Framework 4。SharePoint 面向 Microsoft .NET Framework 3.5,因此不应使用"WCF"版本。

使用 SharePoint 数据源对 ADO.NET Data Services 进行编程

无论是否有数据源,对 ADO.NET Data Services 进行编程在本质上都是一样的。在您的 Microsoft Visual Studio 2010 项目中,可通过指定其 URL 添加 RESTful 服务。对于 SharePoint Foundation,该 URL 始终为 https://server/site_path/_vti_bin/listdata.svc,其中 site_path 为指向网站的路径,客户端将访问该网站的列表数据。系统将提示您指定服务引用的名称。

当您添加引用时,ADO.NET Data Services 将创建到网站中列表的对象关系映射,并将其存储到一个名为 reference.cs 的文件中。同时创建一个名为 site nameDataContext 的类,其中 site name 是网站名称,这个类是从 DataServiceContext 类派生的,它为网站中的每个列表提供属性。每一个这样的属性都属于 DataServiceQuery<TElement> 类型的,其中,类型参数的类型就是填充列表的项的类型。这些项类型本身在 reference.cs 中进行了声明。每个项类型的名称为 list nameItem,其中,list name 为列表名称,例如:AnnouncementsItem。每个这样的项类型都有一个针对列表中每个字段(列)的属性。

reference.cs 文件中的所有内容都在其自身的命名空间内。该命名空间是通过将您的项目的命名空间(如 program.cs 文件或用于 Windows 窗体应用程序的 form.cs 文件中指定的命名空间)与您为服务引用指定的名称连接在一起而构建的。例如,如果 Contoso.SharePoint.Client 是您的项目命名空间,而 MySiteService 是您为服务引用指定的名称,则对象关系映射的命名空间就是 Contoso.SharePoint.Client.MySiteService。

您创建程序逻辑时所用的方式与对任何其他 ADO.NET Data Services 数据源所用方式是相同的。首先是为服务引用命名空间的短名称添加 using 语句,这个短名称就在将要包含诸如 program.cs 或 form.cs 等逻辑的代码文件的命名空间方括号内。下面是一个示例。

namespace Contoso.SharePoint.Client
{
    using MySiteService;
}

下一个主要步骤是获取对数据上下文对象的引用,该引用相当于通向对象关系映射中对象的通路。在下面的示例中,MyServer 是开发服务器的名称,而 MySite 则是网站的名称,因此 MySiteDataContext 就是在对象关系映射中定义的类。

MySiteDataContext msdc = new MySiteDataContext(new Uri("http://MyServer/MySite/_vti_bin/listdata.svc"));

然后,您可以使用 LINQ 语法查询来查询网站中的任何列表,示例如下。

var excitingAnnouncements = from announcement in msdc.Announcements
                            where announcement.Title.EndsWith("!")
                            select announcement;

如果您的代码要对同一个列表进行多次查询,请考虑先将整个列表读取到本地 List<T> 对象中,然后使用该对象作为进一步查询的源。下面是一个示例。

List<AnnouncmentsItem> allAnnouncements = msdc.Announcements.ToList();

var excitingAnnouncements = from announcement in allAnnouncements
                            where announcement.Title.EndsWith("!")
                            select announcement;

您可以使用 SaveChanges() 方法将在客户端应用程序中进行的数据更改保存到 SharePoint Foundation 列表。下面是一个示例。

var excitingAnnouncements = from announcement in msdc.Announcements
                            where announcement.Title.EndsWith("!")
                            select announcement;

foreach (var announcement in excitingAnnouncements)
{
    announcement.Title += "!!";
}
msdc.SaveChanges();