OData 和 AtomPub: 使用WCF数据服务绑定 AtomPub 服务器2012-07-29 MSDN Chris Sells如果您不熟悉开放数据协议 (OData),我要告诉您它很美妙。OData(在 odata.org 上有详细介绍)以下列各种基于 HTTP 的功能优势 为基础:用于发布数据的 Atom;用于创建、更新和删除数据的 AtomPub;以及用于定义数据类型的 Microsoft 实体数据模型 (EDM)。如果您拥有 JavaScript 客户端,则可以采用 JSON 格式(而不是 Atom 格式)直接返回数据;如果您拥有其他客户端(包括 Excel、 .Microsoft NET Framework、PHP、AJAX 等),则可以使用客户端库来形成 OData 请求和处理 OData 响应。如果您在服务器端使用 .NET Framework,则 Microsoft 还提供一个易于使用的库,该库称为 WCF 数据服务,用于公开 Microsoft 实体框架支持的 .NET Framework 类型或数据库作为 OData 源。这样,您就可以采用基于 HTTP 的方式和标准方式,通过 Internet 轻松公开您的数据。话虽如此,您也可能希望使用 OData 执行一些并不完全属于现成功能的任务,如将 OData 与现有基于 Atom 和 AtomPub 的阅读器和 编写器集成。这正是我们要尝试的功能。一个简单的博客例如,假设我要构建一个简单的博客系统(事实上,此工作基于我对 sellsbrothers.com 上的内容管理系统的重新编写)。我对 Visual Studio 2010 中的模型优先支持十分着迷,因此创建了一个 ASP.NET MVC 2.0 项目,添加了一个名为 MyBlogDB.edmx 的 ADO.NET EDM 文件,并设计了一个 Post 实体,如图 1 所示。

图 1 在 Visual Studio 2010 中创建的 Post 实体博客软件越复杂,需要跟踪的数据越多,但图 1 显示了一些基本数据。右键单击设计器图面时,可以选择“根据模型生成数据库”, 这会显示将创建的 SQL 文件(在本例中为 MyBlogDB.sql)以及将为创建数据库而生成的 SQL。单击“完成”将创建 SQL 文件并将数据库 绑定到我在 EDM 设计器中创建的实体。SQL 的重要部分如图 2 所示。图 2 使用“根据模型生成数据库”生成的 SQL 代码
...
USE [MyBlogDB];
GO
...
-- Dropping existing tables
IF OBJECT_ID(N"[dbo].[Posts]", "U") IS NOT NULL
DROP TABLE [dbo].[Posts];
GO
...
-- Creating table "Posts"
CREATE TABLE [dbo].[Posts] (
[Id] int IDENTITY(1,1) NOT NULL,
[Title] nvarchar(max) NOT NULL,
[PublishDate] datetime NULL,
[Content] nvarchar(max) NOT NULL
);
GO
...
-- Creating primary key on [Id] in table "Posts"
ALTER TABLE [dbo].[Posts]
ADD CONSTRAINT [PK_Posts]
PRIMARY KEY CLUSTERED ([Id] ASC);
GO