microsoft / microsoft/OpenAPI.NET.OData

Microsoft.OData.Edm 9.0.0-rc compat: MissingMethodException on ExtensionMethods.GetReturn(IEdmOperation)

Open
#833 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C#
Stars
240
Forks
70
Avg merge
7h 59m
Merged PRs (30d)
13

Description

Summary

Microsoft.OpenApi.OData.Reader 3.2.1 throws System.MissingMethodException at runtime when used with Microsoft.OData.Edm 9.0.0-rc. The published 3.x assembly has IL that calls Microsoft.OData.Edm.ExtensionMethods.GetReturn(Microsoft.OData.Edm.IEdmOperation), but that extension method was removed in OData/odata.net@10c65053e and is therefore absent from the Microsoft.OData.Edm 9.0.0-rc NuGet package.

Affected versions
Package Version Status
Microsoft.OpenApi.OData 3.2.1 (latest 3.x) Calls GetReturn
Microsoft.OData.Edm 8.4.3 Has GetReturn — works
Microsoft.OData.Edm 9.0.0-preview.3 / preview.4 Missing GetReturn — breaks
Microsoft.OData.Edm 9.0.0-rc Missing GetReturn — breaks
Microsoft.OData.Edm main (post-9.0.0-rc) GetReturn restored in OData/odata.net@e375dd74e
Repro

Any model that produces at least one IEdmOperation path (entity sets are enough to make ODataPathProvider.RetrieveBoundOperationPaths walk the operation paths it accumulated and evaluate the _allOperationPaths.Where(...) lambda that calls GetReturn).

var model = builder.GetEdmModel();
var doc = model.ConvertToOpenApi(new OpenApiConvertSettings());
Exception
System.MissingMethodException: Method not found: 'Microsoft.OData.Edm.IEdmOperationReturn Microsoft.OData.Edm.ExtensionMethods.GetReturn(Microsoft.OData.Edm.IEdmOperation)'.
   at Microsoft.OpenApi.OData.Edm.ODataPathProvider.RetrieveBoundOperationPaths(OpenApiConvertSettings convertSettings)
   at Microsoft.OpenApi.OData.Edm.ODataPathProvider.GetPaths(IEdmModel model, OpenApiConvertSettings settings)
   at Microsoft.OpenApi.OData.Edm.ODataContext.LoadAllODataPaths()
   ...
   at Microsoft.OpenApi.OData.EdmModelOpenApiExtensions.ConvertToOpenApi(IEdmModel model, OpenApiConvertSettings settings)
Root cause

OData/odata.net PR 10c65053e ("Add 'ReturnType' default interface property into IEdmOperation, remove 'GetReturn' extension method", Nov 6, 2025) removed the static extension and added a ReturnType default interface member on IEdmOperation instead. The replacement is operation.Return (returns IEdmOperationReturn) — semantically equivalent, but a binary break for callers compiled against 8.x.

That removal shipped in 9.0.0-rc (May 5, 2026). The following day, OData/odata.net@e375dd74e brought GetReturn back as a back-compat extension on top of IEdmOperation.Return, so the next Edm 9.x release after 9.0.0-rc should restore source/binary compatibility with the existing OpenApi.OData 3.x release.

Disassembled callsites in Microsoft.OpenApi.OData.Reader.dll 3.2.1 (8 occurrences in total):

  • ODataPathProvider.RetrieveBoundOperationPaths (lambda over _allOperationPaths + body)
  • EdmOperationExtensions (operation-import path enumeration)
  • OperationHandler.AppendSystemQueryOptions(IEdmFunction)
  • EdmModelHelper.VisitOperation
  • … and a few more in schema-generation paths.
Ask
  1. Confirm 3.x will pick up the next Edm 9.x release (post-9.0.0-rc) once it ships with GetReturn restored.
  2. Plan a 4.x preview of Microsoft.OpenApi.OData that migrates the GetReturn(...) callsites to the new IEdmOperation.Return member, so consumers can target Edm 9.x without depending on the back-compat shim. Bumping the Microsoft.OData.Edm dependency from >= 8.4.3 to >= 9.x would also unblock consumers from forcibly overriding the floor (which is what surfaces this bug today).
Workaround

For consumers wedged against Edm 9.0.0-rc, the only options are (a) pin Microsoft.OData.Edm back to 8.x, or (b) wait for the next Edm 9.x release where GetReturn is restored.

Happy to PR step 2 if useful — let me know if there's an existing branch or design preference.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the model.ConvertToOpenApi repro and inspect ODataPathProvider.RetrieveBoundOperationPaths, EdmOperationExtensions, OperationHandler.AppendSystemQueryOptions, and EdmModelHelper.VisitOperation. Trace the eight reported GetReturn callsites and review the Edm 9.x compatibility implications. Done means a 4.x migration plan or implementation using IEdmOperation.Return, with compatibility behavior and dependency-version changes confirmed.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
api, backend-api-design
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.