OData для веб-API: как вы расширяете одну сущность?
Я прочитал обаэти статьи несколько раз, чтобы попытаться выяснить, как использовать$expand
Опция запроса для одной сущности, но во всех отношениях, которые я пробовал, я просто не могу заставить ее работать. Все остальные параметры запроса работают и$expand
также в настоящее время работает над результатами сбора.
модель: У сущностей игроков есть свойство навигации, называемое Stats, в котором каждый объект содержит статистику для этого игрока за данный год.
Я настроил OData таким образом:
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);
Первоначально я настроил свой контроллер следующим образом:
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);
}
}
С этой конфигурацией я могу сделать эти запросы:
/odata/OPlayer(600)
/odata/OPlayer
/odata/OPlayer?$expand=Stats
Но, видимо, нет (результат не расширен):
/odata/OPlayer(600)?$expand=Stats
В обеих статьях упоминается, что для его поддержки необходимо добавить метод (действие?) В свой контроллер, который выглядит следующим образом:
[Queryable]
public SingleResult<Player> GetPlayer(int id)
{
return SingleResult.Create(_dbContext.Players.Where(c => c.ID == id);
}
Когда я добавляю это в мой контроллер, оба/odata/OPlayer(600)
а также/odata/OPlayer(600)?$expand=Stats
вернутьNo action was found on the controller 'OPlayer' that matches the request.
Может ли кто-нибудь дать разъяснения или дать указание, чтобы поддержать$expand
на одной сущности?