共用方式為


ASP.NET Web API OData 5.3 中的新增功能

Microsoft 提供

本主題旨在說明 ASP.NET Web API OData 5.3 的新增功能。

下載

執行時間功能在 NuGet 資源庫上發行為 NuGet 套件。 您可以使用 NuGet 套件管理員控制台來安裝或更新已發行的 NuGet 套件:

Install-Package Microsoft.AspNet.OData -Version 5.3.0 
Install-Package Microsoft.AspNet.WebApi.OData -Version 5.3.0

文件集

您可以在 ASP.NET 網站中找到有關 ASP.NET Web API OData 的教學課程和其他文件。

OData Core 程式庫

針對 OData v4,Web API 現在使用 ODataLib 6.5.0 版

ASP.NET Web API OData 5.3 中的新功能

可在 $expand 中支援 $levels

您可以在 $expand 查詢中使用 $levels 查詢選項。 例如:

http://example.com/Employees?$expand=Manager($levels=2)

此查詢相當於:

http://example.com/Employees?$expand=Manager($expand=Manager))

支援開放式實體類型

開放式類型是結構化類型,除了類型定義中宣告的任何屬性之外,還包含動態屬性。 開放式類型可讓您為資料模型新增彈性。 如需詳細資訊,請參閱 xxxx。

支援開放式類型中的動態集合屬性

先前,動態屬性必須是單一值。 在 5.3 中,動態屬性可以有集合值。 例如,在下列 JSON 酬載中,Emails 屬性是動態屬性,而且是字串類型的集合:

{
   "Id": 1,
   "Name": "Ben",
   "Emails@odata.type": "#Collection(Edm.String)",
   "Emails": [
      "a@a.com",
      "b@b.com"
   ]
}

支援複雜類型的繼承

現在複雜類型可以繼承自基底類型。 例如,OData 服務可以定義下列複雜類型:

public abstract class Shape
{
    public bool HasBorder { get; set; }
}

public class Point
{
    public int X { get; set; }
    public int Y { get; set; }
}

public class Circle : Shape
{
    public Point Center { get; set; }
    public int Radius { get; set; }

    public override string ToString()
    {
        return "{" + Center.X + "," + Center.Y + "," + Radius + "}";
    }
}

public class Polygon : Shape
{
    public IList<Point> Vertexes { get; set; }
    public Polygon()
    {
        Vertexes = new List<Point>();
    }
}

以下是此範例的 EDM:

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
  <edmx:DataServices>
    <Schema Namespace="ODataComplexTypeInheritanceSample" xmlns="http://docs.oasis-open.org/odata/ns/edm">
      <ComplexType Name="Shape" Abstract="true">
        <Property Name="HasBorder" Type="Edm.Boolean" Nullable="false" />
      </ComplexType>
      <ComplexType Name="Polygon" BaseType="ODataComplexTypeInheritanceSample.Shape">
        <Property Name="Vertexes" Type="Collection(ODataComplexTypeInheritanceSample.Point)" />
      </ComplexType>
      <ComplexType Name="Point">
        <Property Name="X" Type="Edm.Int32" Nullable="false" />
        <Property Name="Y" Type="Edm.Int32" Nullable="false" />
      </ComplexType>
      <ComplexType Name="Circle" BaseType="ODataComplexTypeInheritanceSample.Shape">
        <Property Name="Center" Type="ODataComplexTypeInheritanceSample.Point" />
        <Property Name="Radius" Type="Edm.Int32" Nullable="false" />
      </ComplexType>
      <EntityContainer Name="Container">
      </EntityContainer>
    </Schema>
  </edmx:DataServices>
</edmx:Edmx>

如需詳細資訊,請參閱 OData 複雜類型繼承範例

已知問題和重大變更

本節旨在說明 ASP.NET Web API OData 5.3 中的已知問題和重大變更。

OData v4

查詢選項

問題:搭配 $levels=max 使用巢狀 $expand 會導致展開深度不正確。

例如,假設有下列要求:

~/Entities(6)?$expand=P($levels=2;$expand=D($levels=max))

如果 MaxExpansionDepth 為 5,則此查詢會產生 6 的展開深度。

錯誤修正和次要功能更新

此版本還包括多個錯誤修正和次要功能更新。

ASP.NET Web API OData 5.3.1

在此版本中,我們已進行一些 AllowedFunctions 列舉的錯誤修正。 此版本沒有任何其他錯誤修正或新功能。