使用OData客户端v3扩展嵌套对象

时间:2018-12-04 14:57:17

标签: c# .net odata

我在.NET Framework项目中使用Microsooft.Data.Services.Client并尝试扩展第二级对象时遇到了一些问题。

下面是一个具有以下数据模型的示例:

public class Customer
{
    public Order Order { get; set; }
}

public class Order
{
    public Item Item { get; set; }
}

public class Item
{
    public int Id { get; set; }
    public string Description { get; set; }
}

如果我使用.Execute()方法,并提供如下所示的RequestUri: "V3/Customer?$expand=Order,Order/Item" 它将真正起作用,并在要包含在我的查询中的子元素上进行延迟加载。

如果我这样使用DataServiceQuery(其中上下文是DataServiceContext的实例):

var q = context.Customers.Expand(x => x.Order).Expand(x => x.Order.Item);

这会将Order对象加载到客户结果中,而不是订单项目中。

如果我查看上下文将创建的查询,它类似于Execute中的Uri使用。

如何在OData客户端V3上使用DataServiceContext加载嵌套元素(在本例中为“订单/商品”)?

1 个答案:

答案 0 :(得分:0)

在这种情况下,解决方案是使用投影并将MergeOption设置为OverwriteChanges。

using(var ctx = new DataServiceContext(...){MergeOption = OverwriteChanges})
{
    from c in ctx.Customers
    select new Customer
    {
        Order = new Order
        {
            Item = new Item
            {
                Id = c.Order.Item.Id,
                Description = c.Order.Item.Description
            }
        }

    }
}