REST 服务和语义(ADO.NET 数据服务框架)

具象状态传输 (REST) 服务基于以下两项需求:

  • 一个用于定位网络资源的寻址方案。

  • 一个用于返回这些资源的表示形式的方法。

ADO.NET 数据服务框架支持这两项 REST 需求。ADO.NET 数据服务框架实现一个数据寻址方案,该方案使用 URI 定位通过 HTTP 标头协商的数据。数据按照 JavaScript 对象表示法 (JSON) 或 Atom 发布协议 (AtomPub) 进行传输。

ADO.NET 数据服务可以基于一个数据存储实现范围来部署数据实体以及这些实体之间的关系。系统可以部署实现 IQueryable 的任何提供程序。若要支持更新,提供程序必须实现 IUpdatable

ADO.NET 数据服务框架还使用正确构建的 HTTP 缓存基础结构和标准身份验证方案(如 Microsoft ASP.NET)来控制对数据服务的访问。

数据寻址方案

ADO.NET 数据服务的数据寻址方案使用 URI 指向通过 HTTP 标头协商的数据。以下示例中显示了用于定位数据服务资源的有效 URI:

所有 Customershttp://host/service.svc/Customers

所有 Orders(按发货日期排序):http://host/service.svc/SalesOrders?$orderby=ShippedDate

包含键“ALFKI”的 Customer 实体:http://host/service.svc/Customers('ALFKI')

包含键“ALFKI”的 Customer 对应的 Orders 实体:http://host/service.svc/Customers('ALFKI')/SalesOrders

有关更多语法示例,请参见使用统一的 URI 对数据进行寻址的简单方案(ADO.NET 数据服务框架)

数据定义模型

ADO.NET 数据服务使用概念架构定义语言 (CSDL) 来定义它表示的数据。CSDL 架构是一个基于实体数据模型 (EDM) 的 XML 文档。有关 EDM 的更多信息,请参见 ADO.NET 实体框架

利用正确定义的数据描述机制,可以创建设计时工具,以便提取服务中的元数据和构建运行时使用的用户界面、包装程序和元数据存储库,从而方便对数据的使用。

以下 CSDL 示例定义了 CustomerSalesOrder 这两个 EntityType 数据结构,二者都包含几个属性和一个 NavigationProperty(可用于遍历 CustomerOrder 实体之间的关系)。在该示例中,NavigationProperty 基于 CustomerOrder 实体之间定义的一对多 Association

<?xml version="1.0" encoding="utf-8"?>
 <Schema Namespace="NorthwindModel" Alias="Self"
 xmlns="https://schemas.microsoft.com/ado/2006/04/edm">
  <EntityType Name="Customer">
    <Key>
      <PropertyRef Name="CustomerID" />
    </Key>
    <Property Name="CustomerID" Type="String" Nullable="false" />
    <Property Name="CompanyName" Type="String" Nullable="false" />
    <Property Name="ContactName" Type="String" Nullable="true" />
    <Property Name="City" Type="String" Nullable="true" />
    <Property Name="Country" Type="String" Nullable="true" />
    <NavigationProperty Name="SalesOrders"
            Relationship="Self.Customer_Order" FromRole="Customer"
            ToRole="SalesOrder" />
  </EntityType>

  <EntityType Name="SalesOrder">
    <Key>
      <PropertyRef Name="OrderID" />
    </Key>
    <Property Name="OrderID" Type="Int32" Nullable="false" />
    <Property Name="OrderDate" Type="DateTime" Nullable="true" />
    <Property Name="ShipCity" Type="String" Nullable="true" />
    <Property Name="ShipCountry" Type="String" Nullable="true" />
    <NavigationProperty Name="Customer"
       Relationship="Self.Customer_Order"
       FromRole="SalesOrder" ToRole="Customer" />
  </EntityType>

  <Association Name="Customer_Order">
    <End Role="Customer" Type="Self.Customer" Multiplicity="1" />
    <End Role="SalesOrder" Type="Self.SalesOrder" Multiplicity="*" />
  </Association>

  <EntityContainer Name="NorthwindEntities">
    <EntitySet Name="Categories" EntityType="Self.Category" />
    <EntitySet Name="Products" EntityType="Self.Product" />
    <EntitySet Name="Customers" EntityType="Self.Customer" />
    <EntitySet Name="SalesOrders" EntityType="Self.SalesOrder" />
    <AssociationSet Name="CustomerOrders"
                  Association="Self.Customer_Order">
      <End Role="Customer" EntitySet="Customers" />
      <End Role="SalesOrder" EntitySet="SalesOrders" />
    </AssociationSet>
  </EntityContainer>

</Schema>

另请参见

概念

ADO.NET 数据服务框架概述
创建 ADO.NET 数据服务
ADO.NET 数据服务的客户端应用程序
ADO.NET 数据服务规范
数据传输格式(ADO.NET 数据服务框架)

其他资源

实体数据模型