Я добавил поддержку odata в свой основной проект asp.net.Если я использую раскрытие при вызове одатаны Get (), то оно правильно возвращает расширенные данные.Но если попытаться развернуть те же данные для одного элемента (т. Е. Получить (ключ)), данные для записи будут возвращены, а сущность, которую я хочу расширить, будет возвращена как ноль.
Я проверил, что раскрытие работает для вызова odata Get (), но не для вызова Get (key).
Когда этот вызов odata для Get () выполняется правильнорасширяет данные:
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))"," value ": [{" Id ":35096, «LocationId»: 2003, «Status»: «O», «Location»: {«LogicalId»: 5, «Description»: «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, "Status": "O", "Adjusted": null, "ManagerCountBased": "N", "UnitType": "B", "TaxLevel01": 8001, "TaxLevel02": 0, "TaxLevel03": 0, "TaxLevel04": 0, "TaxLevel05": 0, "TaxLevel06": 0, "TaxLevel07": 0, "TaxLevel08": 0, "Location": null
В этом случае сущность Location является нулевой и tВозвращаются все свойства EventLocation, а не только те, которые указаны при выборе запроса.
Функции My Get () и Get (key) контроллера OData определены следующим образом:
[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 (ключ) и вернется правильный набор результатов.