使用 Asp.Net WebApi + EF + Odata 深度插入数据

Posted

技术标签:

【中文标题】使用 Asp.Net WebApi + EF + Odata 深度插入数据【英文标题】:Deep Inserting data with Asp.Net WebApi + EF + Odata 【发布时间】:2016-12-10 04:33:36 【问题描述】:

我正在使用 Odata v4 WebApi 2.2、Entity Framework 6 和 Odata v4 代理客户端 (WPF) 在一个项目中。

考虑以下代码:

//Model Class
public class Order

    public int OrderId get;set; //Auto Generated Id
    public string OrderDescription get;set;

    Public virtual IEnumerable<OrderLine> OrderLines;


//Model Class
public class OrderLine

    public int OrderId get;set; //Auto Generated Id
    public int OrderLineId get;set; //Key of the parent entity
    public string PartDescription  get;set;

    Public virtual Order Order;



//Odata Proxy Client Code
public void insert()

    Order order new Order;
    order.OrderDescription = "Test Desc";

    order.Add( new OrderLinePartDescription = P100) //OrderId & OrderLineId is null
    order.Add( new OrderLinePartDescription = P101)//OrderId & OrderLineId is null
    order.Add( new OrderLinePartDescription = P101)//OrderId & OrderLineId is null

    //When save changes is called OrderId needs to be set to order lines
    Context.SaveChanges();

我需要使用来自客户端的订单行创建订单并将其发送回数据库进行保存。问题是在数据库中为类OrderOrderLine 自动生成密钥。

我需要进行深度插入,操作需要按以下顺序进行。

    需要先插入订单。在插入订单行之前。 需要设置订单行的OrderId。 需要插入订单行。

EF 或 Odata V4 是否支持深度插入? 我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

现在不支持深度插入,但您可能有一个变通办法,使用 $ref,

WebAPI端有一个例子:

https://github.com/xuzhg/WebApiSample/tree/eb795e26547555666410a79b88e3930d22479798/WebApiODataSample

【讨论】:

以上是关于使用 Asp.Net WebApi + EF + Odata 深度插入数据的主要内容,如果未能解决你的问题,请参考以下文章

带有 EF Core 的 ASP.NET Core - DTO 集合映射

带有 EF Core 更新实体的 ASP.Net 核心 Web Api 如何

Asp.net Core 6.0 使用EF Model First 连接mysql

Asp.net Core 6.0 使用EF Model First 连接mysql

在 ASP.NET Core 中使用 Entity Framework 6

asp.net WebApi 使用总结