Расширение вложенного объекта с использованием клиента OData v3 - PullRequest
0 голосов
/ 04 декабря 2018

Я сталкиваюсь с некоторыми проблемами, использую Microsooft.Data.Services.Client в проекте .NET Framework и пытаюсь развернуть объекты 2-го уровня.

Вот пример, имеющий следующую модель данных:

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 следующим образом (где context является экземпляром DataServiceContext):

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

Это загрузит объект Order в результат клиента, но НЕ в Itemпорядка.

Если я посмотрю на запрос, который создаст контекст, он будет похож на использование Uri в Execute.

Как загрузить вложенные элементы (в данном случае 'Order / Item ') с использованием DataServiceContext с клиентом OData V3?

1 Ответ

0 голосов
/ 06 декабря 2018

Решение состоит в том, чтобы использовать проекции и в этом случае установить 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
            }
        }

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...