使用 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();
我需要使用来自客户端的订单行创建订单并将其发送回数据库进行保存。问题是在数据库中为类Order
和OrderLine
自动生成密钥。
我需要进行深度插入,操作需要按以下顺序进行。
-
需要先插入订单。在插入订单行之前。
需要设置订单行的
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