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

时间:2016-08-04 07:16:37

标签: c# entity-framework asp.net-web-api entity-framework-4 odata

我使用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 OrderLine{PartDescription = P100}) //OrderId & OrderLineId is null
    order.Add( new OrderLine{PartDescription = P101})//OrderId & OrderLineId is null
    order.Add( new OrderLine{PartDescription = P101})//OrderId & OrderLineId is null

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

我需要从客户端创建Order with Order行,然后发送回数据库进行保存。问题是密钥是在数据库中为类Order&amp;而自动生成的。 OrderLine

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

  1. 需要先插入订单。在插入订单行之前。
  2. 需要设置订单行的OrderId
  3. 需要插入订单行。
  4. EF或Odata V4是否支持深度插入? 我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

现在不支持深度插入,但是您可能有一个解决方法,使用$ ref,

WebAPI方面有一个例子:

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