OData v4, расширяющий несколько один-много - PullRequest
1 голос
/ 30 января 2020

Я создаю ASP. NET Core 3.1 Web API с использованием OData v4.

Я только что сделал репозиторий GitHub здесь , содержащий все решение, даже проект базы данных с фиктивными данными.

Некоторые блоги помогли мне в этом:

Эксперимент с OData в ASP. NET Core 3.1

Наддув ASP. NET Core API с OData

Я успешно создал 3 базовых c конечных точки, к которым можно обращаться (страны, города и клиенты). Конечные точки страны и города работают должным образом, именно конечная точка клиента вызывает некоторые проблемы при расширении $.

Модель клиента выглядит следующим образом (обратите внимание, что в настоящее время я использую доменные объекты вместо DTO, потому что я хочу чтобы все сначала работало гладко, прежде чем проецировать их в DTO):

public abstract class AppEntity : IAppEntity
{
    [Key]
    public int Id { get; set; }
}

public class Customer : AppEntity
{
    public string Name { get; set; }
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public virtual City City { get; set; }
    public string VAT { get; set; }
    public virtual List<CustomerEmailAddress> EmailAddresses { get; set; }
    public virtual List<CustomerNote> Notes { get; set; }
}

Со следующими моделями, действующими как свойства навигации:

public class CustomerEmailAddress : AppEntity
{
    public Customer Customer { get; set; }
    public string EmailAddress { get; set; }
    public bool IsPrimary { get; set; }
}

public class CustomerNote : AppEntity
{
    public Customer Customer { get; set; }
    public DateTime DateTime { get; set; }
    public string Message { get; set; }
}

Большинство моих запросов успешны:

  1. Только коллекция: https://localhost: 44309 / API / клиент
  2. Расширение города: https://localhost: 44309 / API / клиент ? $ expand = City
  3. В одном из множества отношений: https://localhost: 44309 / api / customer ? $ expand = Примечания

Но как только я пытаюсь развернуть 2 или более одно-много свойств или развернуть все (? $ expand = *), я получаю исключение:

System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')

Любая подсказка, откуда может исходить это исключение?

Моя EdmModel определяется как:

IEdmModel GetEdmModel()
{
    var odataBuilder = new ODataConventionModelBuilder();

    odataBuilder.EntitySet<Country>("Country");
    odataBuilder.EntitySet<City>("City");
    odataBuilder.EntitySet<Customer>("Customer");

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