DataServiceContext:更新导航集合属性

时间:2015-07-20 12:19:48

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

我在Odata v4客户端中使用Odata WebApi.2.1服务。

当我尝试更新实体时,我收到了以下错误:

" UpdateRelatedObject方法仅在sourceProperty不是集合时才有效"

我的应用程序中有以下代码。

public class Customer
{
    int CustomerId;
    string CustomerName;
    ICollection<Order> Orders;
}


    public void Save()
    {
        foreach (var item in Customer.Orders)
        {
            Context.UpdateRelatedObject(Customer, "Orders", item);
        }

        Context.UpdateObject(Customer);
        Context.SaveChanges();
    }

在这里,&#34;订单&#34;是Customer类的导航属性。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

的Rahul

基本上,有两条规则:

  1. 发布 对任何非集合值导航属性无效。
  2. Put / Patch 对任何集合值导航属性无效。
  3. OData客户端中的公共API UpdateRelatedObject旨在更新非集合属性。在其开源中,代码如下:

    public void UpdateRelatedObject(object source, string sourceProperty, object target)
    {
        ...
        ClientPropertyAnnotation property = parentType.GetProperty(sourceProperty, false);
        if (property.IsKnownType || property.IsEntityCollection)
        {
         throw Error.InvalidOperation(Strings.Context_UpdateRelatedObjectNonCollectionOnly);
        }
        ...
    }
    

    因此,您的错误消息将在上面的throw语句中抛出。

    通常情况下,您可以按照以下步骤操作:

    1. 查询相关订单,例如:GET~ / Customers(2)/ Orders(1)
    2. 修改退回的订单对象
    3. 更新修改后的订单以调用:UpdateObject
    4. 希望它可以帮到你。感谢。