У меня есть Microsoft.Odata.Edm.IEdmModel , и я пытаюсь определить, к какому EntitySet относится каждая операция. Но это не представляется возможным. Я пробовал следующее:
var edm = WebApiConfig.GetOdataEdmModel();
var operation = edm.SchemaElements.First(x => (x as IEdmOperation)?.Name == "GetRecentCustomers") as IEdmOperation;
var boundTo = operation.FindParameter("bindingParameter");
var matchingEntitySets = edm.EntityContainer.EntitySets()
.Where(x => x.Type.FullTypeName() == boundTo.Type.Definition.FullTypeName())
.ToList();
Проблема в том, что MatchEntitySets может иметь более одного результата. Причина в том, что модель OData построена следующим образом:
например,
var builder = new ODataConventionModelBuilder();
builder.EntitySet<BusinessEntity>("Customers");
builder.EntitySet<BusinessEntity>("Vendors");
builder.EntityType<BusinessEntity>()
.Collection
.Function(nameof(CustomersController.GetRecentCustomers))
.ReturnsCollectionFromEntitySet<BusinessEntity>("Customers");
Является ли ответом просто то, что OData не поддерживает более одного набора сущностей с одним и тем же типом модели? Если это так, то почему строитель не защищает от этого?