我已经在asp.net核心项目中添加了odata支持。如果我在Get()odata调用上使用expand,它将正确返回扩展的数据。但是,如果尝试为单个项目(即Get(键))扩展相同的数据,则返回记录的数据,但是我要扩展的实体返回为null。
我已经确认该扩展适用于Get()odata调用,而不适用于Get(key)调用。
在对Get()进行此odata调用时,它会正确扩展数据:
返回
“ @ odata.context”:“ https://localhost:44335/odata/ $ metadata#EventLocations(Id,LocationId,Status,Location(LogicalId,Description))”, “值”:[ { “编号”:35096, “ LocationId”:2003, “状态”:“ O”, “位置”: { “ LogicalId”:5 “描述”:“ ST-Fresh Mex-RF” } } ]
但是当我尝试对单个项目使用扩展时,我要扩展的实体返回为空。
返回:
“ @ odata.context”:“ https://localhost:44335/odata/ $ metadata#EventLocations(Location(LogicalId,Description))/ $ entity”, “ Id”:35097, “ EventId”:17002, “ LocationId”:19005, “ CashCount”:-1, “ CreditCount”:0, “ ClerkCount”:0, “状态”:“ O”, “已调整”:null, “ ManagerCountBased”:“ N”, “ UnitType”:“ B”, “ TaxLevel01”:8001, “ TaxLevel02”:0, “ TaxLevel03”:0, “ TaxLevel04”:0, “ TaxLevel05”:0, “ TaxLevel06”:0, “ TaxLevel07”:0, “ TaxLevel08”:0, “位置”:空
在这种情况下,Location实体为null,并且返回EventLocation的所有属性,而不仅仅是返回请求选择中指定的属性。
OData Controller的My Get()和Get(key)函数定义如下:
[EnableQuery]
[HttpGet]
[ODataRoute]
public IQueryable<TblEventLocation> Get()
{
return _context.TblEventLocation.AsQueryable();
}
[EnableQuery(MaxExpansionDepth = 3)]
[HttpGet]
[ODataRoute("({key})")]
public ActionResult<IQueryable<TblEventLocation>> Get([FromODataUri] decimal key)
{
return Ok(_context.TblEventLocation.FirstOrDefault(c => c.Id == key));
}
非常感谢任何帮助。
我希望应用Get(键)中的选择和扩展选项,并返回正确的结果集。