我在.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加载嵌套元素(在本例中为“订单/商品”)?
答案 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
}
}
}
}