Web API OData: ¿Cómo expandir $ en una sola entidad?
He leído ambosestas artículos varias veces para tratar de encontrar una manera de utilizar el$expand
Opción de consulta en una sola entidad, pero en todas y cada una de las formas en que lo he intentado, parece que no puedo hacer que funcione. Todas las otras opciones de consulta funcionan y$expand
También trabaja actualmente en los resultados de la colección.
Modelo: Las entidades de jugador tienen una propiedad de navegación llamada Estadísticas en la que cada objeto contiene las estadísticas de ese jugador para un año determinado.
He configurado OData de esta manera:
config.EnableQuerySupport();
ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Player>("OPlayer");
modelBuilder.EntitySet<PlayerStatistics>("OPlayerStats");
Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel();
config.Routes.MapODataRoute("ODataRoute", "odata", model);
Originalmente, había configurado mi controlador de esta manera:
public class OPlayerController : EntitySetController<Player, int>
{
private readonly DatabaseContext _db = new DatabaseContext();
protected override Player GetEntityByKey(int key)
{
return _db.Players.FirstOrDefault(p => p.PlayerId == key);
}
public override IQueryable<Player> Get()
{
return _db.Players.AsQueryable();
}
protected override void Dispose(bool disposing)
{
_db.Dispose();
base.Dispose(disposing);
}
}
Con esta configuración, puedo hacer estas consultas:
/odata/OPlayer(600)
/odata/OPlayer
/odata/OPlayer?$expand=Stats
Pero evidentemente no (el resultado no se expande):
/odata/OPlayer(600)?$expand=Stats
Ambos artículos mencionan que para admitirlo, debe agregar un método (¿acción?) A su controlador que tenga este aspecto:
[Queryable]
public SingleResult<Player> GetPlayer(int id)
{
return SingleResult.Create(_dbContext.Players.Where(c => c.ID == id);
}
Cuando agrego esto a mi controlador, ambos/odata/OPlayer(600)
y/odata/OPlayer(600)?$expand=Stats
regresoNo action was found on the controller 'OPlayer' that matches the request.
¿Alguien puede proporcionar aclaraciones o dar indicaciones para apoyar?$expand
en una sola entidad?