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 Web API OData に関するチュートリアルと他のドキュメントは、ASP.NET Web サイトにあります。

OData コア ライブラリ

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 列挙型の一部に対してバグ修正を行いました。 このリリースには、他のバグ修正や新機能はありません。