首页 > 解决方案 > 如果添加到上下文中保存更改

问题描述

EF 核心 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}

标签: entity-framework-core

解决方案


推荐阅读