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

OData V4 client pass pass parent and child as parameter

我有一个用于 "Orders" 的 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 post 中的订单对象一起传递。

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

你可以这样做: DataServiceCollection coll = new DataServiceCollection(context.People.Expand("Photo").Where(p => p.UserName == "russellwhyte")); coll.First().Photo.Name = "test"; coll.First().LastName = "test";
context.SaveChanges(); 如果这不能解决您的问题,请告诉我。