C# 如何确定绑定操作(函数或操作)属于给定Microsoft.Odata.Edm.IEdmModel的EntitySet?

C# 如何确定绑定操作(函数或操作)属于给定Microsoft.Odata.Edm.IEdmModel的EntitySet?,c#,asp.net,.net,odata,C#,Asp.net,.net,Odata,我有一个Microsoft.Odata.Edm.iedmodel,我正在尝试确定每个操作属于哪个EntitySet。但这似乎不可能。 我尝试了以下方法: var edm = WebApiConfig.GetOdataEdmModel(); var operation = edm.SchemaElements.First(x => (x as IEdmOperation)?.Name == "GetRecentCustomers") as IEdmOperation; var boundTo

我有一个Microsoft.Odata.Edm.iedmodel,我正在尝试确定每个操作属于哪个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();
问题是MatchingEntitySet可能有多个结果。原因是OData模型是这样构建的:

e、 g

var builder=new ODataConventionModelBuilder();
建筑商实体集(“客户”);
建造商实体集(“供应商”);
builder.EntityType()
收集
.函数(名称(CustomerController.GetRecentCustomers))
.ReturnsCollectionFromEntitySet(“客户”);

答案是OData不支持多个具有相同模型类型的实体集吗?如果是这样的话,为什么构建器不对此进行保护?

我认为问题仅仅在于有多个实体集引用同一实体。我只取了一个实体集,并给出了它自己的类型,这就解决了这个问题。

我认为问题只是有多个实体集引用同一个实体。我只取了一个实体集,给了它自己的类型,这就解决了问题

var builder = new ODataConventionModelBuilder();
builder.EntitySet<BusinessEntity>("Customers");
builder.EntitySet<BusinessEntity>("Vendors");
builder.EntityType<BusinessEntity>()
       .Collection
       .Function(nameof(CustomersController.GetRecentCustomers))
       .ReturnsCollectionFromEntitySet<BusinessEntity>("Customers");