net core odata помещает и исправляет вложенные структуры данных - PullRequest
0 голосов
/ 26 сентября 2018

Я использовал odata в .net core 2.x web api, и поэтому он работал отлично, но теперь я начинаю реализовывать конечные точки PUT / PATCH и начинаю сталкиваться с проблемами с вложенными структурами.В простой настройке заказа / элемента, как показано ниже, мне нужно вручную обрабатывать удаление и добавление элементов в заказ, если они изменились.Я не могу получить odata для отслеживания вложенных изменений.

public class Item
{
    [Key]
    public int Id { get; set; }
    public int OrderId { get; set; }
    public Order Order { get; set; }
}

public class Order
{
    [Key]
    public int Id { get; set; }
    public virtual ICollection<Item> Items { get; set; }
}

И мой сервис, который обновляет порядок:

public void Update(Order order)
{
    using (var trans = DbContext.Database.BeginTransaction())
    {
        try
        {
            var existingItems = DbContext.Items.Where(t => t.OrderId == order.Id);
            var deleteItems = existingItems.Where(t => order.Items.Count() == 0 || !order.Items.Any(c => c.OrderId == t.OrderId));
            var addItems = order.Items.Where(t => !existingItems.Any(c => c.OrderId == t.OrderId));
            addItems.ToList().ForEach(a => a.OrderId = order.Id);

            DbContext.RemoveRange(deleteItems);
            DbContext.AddRange(addItems);

            DbContext.SaveChanges();

            DbContext.Entry(order).State = EntityState.Modified;
            DbContext.SaveChanges();

            trans.Commit();
        }
        catch (Exception ex)
        {
            trans.Rollback();
            throw ex;
        }
    }
}

По сравнению с тем, как все остальное в Odata работает, это многоработать, и становится намного сложнее с более глубокими вложенными объектами.

Я делаю что-то не так, не могу найти много ресурсов по этому вопросу?

1 Ответ

0 голосов
/ 05 октября 2018

Кажется, что это в настоящее время не поддерживается.Я потратил некоторое время на изучение этого, но единственный полезный ресурс - это: http://odata.github.io/WebApi/#03-02-built-in-routing-conventions

Для меня это означает, что нам нужно написать несколько операций исправления в главном контроллере для связанных сущностей.Есть много проблем с github, но я не нашел там никакой полезной информации.

Я задал вопрос по этой проблеме здесь , и один из авторов подтвердил это..

...