2

如何将对象(实体)传递给 OData 操作?我可以传递简单类型和 ComplexType,但如果尝试传递 EntityType,我会得到:

Invalid parameter type 'apitest.Models.Product'. 
A non-binding parameter type must be either Primitive, Complex, 
Collection of Primitive or a Collection of Complex.

编辑:

var modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Product>("Products");
modelBuilder.EntitySet<PurchaseOrder>("PurchaseOrders");

var addProduct = modelBuilder.Entity<PurchaseOrder>().Action("AddProduct");
addProduct.Parameter<Product>("product");
addProduct.ReturnsFromEntitySet<PurchaseOrder>("PurchaseOrders");

我尝试替换addProduct.Parameter<Product>("product");为:

var productConfig = modelBuilder.StructuralTypes.OfType<EntityTypeConfiguration>().Single(x => x.Name == "Product");
addProduct.SetBindingParameter("product", productConfig, false);

但是我找不到任何关于如何使用 SetBindingParameter 的文档。如果我将 Product 注册为 ComplexType,则第一个代码示例可以工作,但是我不允许将其注册为 Entity。

4

2 回答 2

0

您可以使用 Post 或 Put 操作。只需在您的控制器类中创建它:

public IHttpActionResult Put([FromODataUri] int key, Product product)
{
    ...
}

我在我的应用程序中遇到了同样的问题,我决定创建不是实体类型的 DTO 类。

于 2014-01-28T12:59:56.603 回答
0

假设您将操作绑定到 Entity 类型,这是可行的

builder.EntityType<company>().Action("SetCommunities").CollectionEntityParameter<community>("communities");
public async Task<IHttpActionResult> SetCommunities(Guid key, ODataActionParameters parameters)

在这种情况下由例如http://localhost:63358/odata/companies(451735ef-15f2-4a9f-b4b9-d50c6410bf7c)/Default.SetCommunities/ 调用

于 2017-02-21T08:54:28.437 回答