gpt4 book ai didi

entity-framework - net core odata put和patch嵌套数据结构

转载 作者:行者123 更新时间:2023-12-04 08:29:34 24 4
gpt4 key购买 nike

我一直在 .net core 2.x web api 中使用 odata,所以它运行良好,但现在我开始实现 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 中的其他一切工作方式相比,这是一项大量工作,而且随着嵌套对象的深入,只会变得更加复杂。

我是不是做错了什么,我在这个问题上找不到太多资源?

最佳答案

目前似乎不支持此功能。我花了一些时间对此进行调查,但唯一有用的资源是:http://odata.github.io/WebApi/#03-02-built-in-routing-conventions

这对我来说意味着,我们需要在主 Controller 中为相关实体编写多个补丁操作。关于这方面有很多 github 问题 - 但我在那里找不到任何有用的信息。

我问了一个关于这个问题的问题 here其中一位贡献者证实......

关于entity-framework - net core odata put和patch嵌套数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52523205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com