entity-framework-core - 如果添加到上下文中保存更改
问题描述
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}
解决方案
推荐阅读
- javascript - 使用 module.exports = new Sample 与 module.exports = Sample 导出对象
- arrays - Excel VBA - 搜索所有文件夹的递归文件(向下钻取)将结果写入同一个数组不像集合那么好用
- elixir - 功能 nil.email/0 在 elixir phoenix 中未定义或私有
- php - 在 laravel 5 中处理复杂的查询
- webpack - 为什么 webpack 中的 [contenthash] 不同?
- matlab - 在matlab中添加许多大矩阵的更快方法
- php - 重力形式获取上传的文件路径
- c# - 如何获取 Cube Data Source View Last Schema Update 值
- html - 如何让 div 向左触摸,使用 flexbox?
- css - 不尊重 safari 上的 z-index 位置:sticky