如果添加到上下文,则保存更改

时间:2019-05-22 13:54:21

标签: entity-framework-core

EF Core 2.2.x

我想回答的问题是我是否只能将一次对SaveChanges的调用限制为一次,还是每次添加一个实体时都需要它,因为在下一个较低级别中,我需要查询DbContext以查看该项目存在。

正在尝试在两组相似的表之间“合并”一些数据。因此,在添加记录和向下钻取层次结构的过程中,我必须首先查看记录是否存在,如果不存在,则将其添加。

/*
    List<StagedOrder> sorders;

    StagedOrder
    Id
    Number
    InsertDate
    Notes

    StagedOrderLine
    Id
    ItemNo
    Qty
    StagedOrderKey
*/    


   foreach( StagedOrder s in sorders) {

   // get order
   Order o = (from a in ctx.Orders where a.number = s.Number select a).FirstOrDefault();
   if(o == null) {
        o = new Order() {
            Number = s.Number,
            InsertDate = DateTime.Now,
            Notes = "imported order"
        };
        ctx.Orders.Add(o);
        // ctx.SaveChanges() ???
   }


   // get lines for orders
   OrderLines ol = (from a in ctx.DetailLines where a.OrderKey = o.Id select a).ToList();
   if(ol == null) {
        foreach(StagedOrderLine l in s.StagedOrderLines) {
            ol = new DetailLine() {ItemNo = l.ItemNo, Qty = l.Qty, OrderKey = l.Id}
            ctx.DetailLines.Add(ol);
            ctx.SaveChanges();
       }
   }

}

// can I limit my call to savechanges only once here?
// ctx.SaveChanges();

此外,我是否应该使用Order.Id或实体引用(例如

)创建新的DetailLine
ol = new DetailLine() {ItemNo = l.ItemNo, Qty = l.Qty, Order = o}

0 个答案:

没有答案