我都读过these articles多次尝试找出使用方法$expand
单个实体上的查询选项,但在我尝试过的每一种方式中,我似乎都无法使其工作。所有其他查询选项都有效并且$expand
目前还致力于收集结果。
Model:玩家实体有一个名为“统计”的导航属性,其中每个对象都包含该玩家在给定年份的统计数据。
我这样设置 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)
and /odata/OPlayer(600)?$expand=Stats
return No action was found on the controller 'OPlayer' that matches the request.
任何人都可以提供澄清或提供指示以支持$expand
在单个实体上?