如何将对象(实体)传递给OData Action?我可以传递简单类型和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。
答案 0 :(得分:0)
您可以使用发布或执行操作。只需在控制器类中创建它:
public IHttpActionResult Put([FromODataUri] int key, Product product)
{
...
}
我在我的应用程序中遇到同样的问题,我决定创建非实体类型的DTO类。
答案 1 :(得分:0)
假设您将操作绑定到实体类型,则可以使用
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/