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或实体引用(例如
)创建新的DetailLineol = new DetailLine() {ItemNo = l.ItemNo, Qty = l.Qty, Order = o}