在Get(键)上使用Expand时,要扩展的对象返回null

时间:2019-05-16 05:42:19

标签: .net-core odata

我已经在asp.net核心项目中添加了odata支持。如果我在Get()odata调用上使用expand,它将正确返回扩展的数据。但是,如果尝试为单个项目(即Get(键))扩展相同的数据,则返回记录的数据,但是我要扩展的实体返回为null。

我已经确认该扩展适用于Get()odata调用,而不适用于Get(key)调用。

在对Get()进行此odata调用时,它会正确扩展数据:

https://localhost:44335/odata/EventLocations?%24select=Id%2CLocationId%2CStatus&%24expand=Location(%24select%3DLogicalId%2CDescription)&%24filter=(EventId%20eq%2017002)

返回

“ @ odata.context”:“ https://localhost:44335/odata/ $ metadata#EventLocations(Id,LocationId,Status,Location(LogicalId,Description))”,     “值”:[         {             “编号”:35096,             “ LocationId”:2003,             “状态”:“ O”,             “位置”: {                 “ LogicalId”:5                 “描述”:“ ST-Fresh Mex-RF”             }         }     ]

但是当我尝试对单个项目使用扩展时,我要扩展的实体返回为空。

即: https://localhost:44335/odata/EventLocations(35097)?select=Id%2CLocationId%2CStatus&%24expand=Location(%24select%3DLogicalId%2CDescription)

返回:

“ @ 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(键)中的选择和扩展选项,并返回正确的结果集。

0 个答案:

没有答案