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 列舉的錯誤修正。 此版本沒有任何其他錯誤修正或新功能。