Novedades de ASP.NET Web API OData 5.3

por Microsoft

En este tema, se describen las novedades de ASP.NET Web API OData 5.3.

Descargar

Las características en tiempo de ejecución se publican como paquetes NuGet en la galería de NuGet. Puede instalar o actualizar los paquetes NuGet publicados mediante la consola del Administrador de paquetes NuGet:

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

Documentación

Puede encontrar tutoriales y otra documentación sobre ASP.NET Web API OData en el sitio web de ASP.NET.

Bibliotecas principales de OData

Para OData v4, la API web ahora usa la versión 6.5.0 de ODataLib.

Nuevas características de ASP.NET Web API OData 5.3

Compatibilidad con $levels en $expand

Puede usar la opción de consulta $levels en consultas de $expand. Por ejemplo:

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

Esta consulta es equivalente a:

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

Compatibilidad con tipos de entidad abiertos

Un tipo abierto es un tipo estructurado que contiene propiedades dinámicas, además de las propiedades declaradas en la definición de tipo. Los tipos abiertos le permiten agregar flexibilidad a los modelos de datos. Para más información, consulte xxxx.

Compatibilidad con propiedades de colección dinámicas en tipos abiertos

Anteriormente, una propiedad dinámica tenía que ser un solo valor. En 5.3, las propiedades dinámicas pueden tener valores de colección. Por ejemplo, en la siguiente carga JSON, la propiedad Emails es una propiedad dinámica y es una colección de tipo de cadena:

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

Compatibilidad con la herencia de tipos complejos

Ahora los tipos complejos pueden heredarse de un tipo base. Por ejemplo, un servicio OData podría definir los siguientes tipos complejos:

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>();
    }
}

Este es el EDM para este ejemplo:

<?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>

Para más información, consulte Ejemplo de herencia de tipos complejos de OData.

Problemas conocidos y cambios importantes

En esta sección, se describen los problemas conocidos y los cambios importantes en ASP.NET Web API OData 5.3.

OData v4

Opciones de consulta

Problema: el uso de $expand anidados con $levels=max da como resultado una profundidad de expansión incorrecta.

Por ejemplo, dada la siguiente solicitud:

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

Si MaxExpansionDepth es 5, esta consulta daría como resultado una profundidad de expansión de 6.

Correcciones de errores y actualizaciones de características secundarias

Esta versión también incluye varias correcciones de errores y actualizaciones de características secundarias.

ASP.NET Web API OData 5.3.1

En esta versión hemos realizado una corrección de errores en algunas de las enumeraciones AllowedFunctions. Esta versión no tiene ninguna otra característica nueva ni correcciones de errores.