OData V4客户端传递父和子作为参数

时间:2016-02-24 21:16:40

标签: c# asp.net-web-api odata asp.net-web-api2

我有一个用于“订单”的OData V4控制器,在订单控制器中我添加了一个名为“SaveWithChild”的方法,它是一个参数类型为ODataActionParameters的HttpPost。
在WebApiConfig中,我在“Orders”实体上为“SaveWithChild”添加了一个ActionConfiguration,其参数类型为“Order”。

现在让我们假设“Order”模型有一个名为“UpdateUser”的属性,并且还有一个名为“OrderLine”的子属性,OrderLine有一个名为“UpdateUser”的属性。

如下所示:

class Order
{
    public string UpdateUser { get; set; }
    public OrderLine OrderLine { get; set; }
}

class OrderLine
{
    public string UpdateUser { get; set; }
}

现在在客户端,我希望能够通过在控制器上调用“SaveWithChild”方法来更新父“Order”和子“OrderLine”的“UpdateUser”字段。

var context = new Container("URI");
var order = (from o in context.Orders.Expand("OrderLine") where o.ID = 1 select o).FirstOrDefault();
order.UpdateUser = "test";
order.OrderLine.UpdateUser = "test";
context.Orders.SaveWithChild(order);

当我运行Fiddler时,我可以看到“OrderLine”对象没有与JSON http帖子中的Order对象一起传递。

我可以将对象序列化为字符串,将其作为字符串传递给控制器​​,然后在控件内反序列化。
这确实有效,但我希望有更好的方法。

1 个答案:

答案 0 :(得分:0)

您可以这样做:             DataServiceCollection coll = new DataServiceCollection(context.People.Expand(" Photo")。其中(p => p.UserName ==" russellwhyte"));             coll.First()。Photo.Name =" test&#34 ;;             coll.First()。LastName =" test&#34 ;;
            context.SaveChanges(); 如果这不能解决您的问题,请与我们联系。