【问题标题】:Entity Framework only save single record from the list实体框架仅保存列表中的单个记录
【发布时间】:2019-03-31 08:53:19
【问题描述】:

我正在尝试从TPOSTransactionTPOSTransactionDetail 插入一条新记录

下面的代码来自我班的一个事件:

_posTransaction = new TPostransaction();
_posTransactionDetail = new TPostransactionDetail();
_posTransactionDetails = new List<TPostransactionDetail>();

_posTransaction.UserId = _user.Id;
_posTransaction.Total = Convert.ToDecimal(txtOrderTotal.Text);
_posTransaction.ChangeDue = Convert.ToDecimal(txtChangeDue.Text);
_posTransaction.AmountPaid = Convert.ToDecimal(txtAmountPaid.Text);
_posTransaction.TransactionDate = DateTime.Now;

foreach (ListViewItem orders in lvOrders.Items)
{
   _posTransactionDetail.ItemId = Convert.ToInt32(orders.SubItems[1].Text);
   _posTransactionDetail.Quantity = Convert.ToInt32(orders.SubItems[3].Text);
   _posTransactionDetail.Subtotal = Convert.ToDecimal(orders.SubItems[4].Text) * Convert.ToDecimal(orders.SubItems[3].Text);
   _posTransactionDetails.Add(_posTransactionDetail);
}

    _posTransaction.TPostransactionDetail = _posTransactionDetails;
    _pos.Add(_posTransaction); //method from a class

这是我保存记录的地方:

当我尝试调试时,POSTransaction.TposTransactionDetail 有 2 条记录,因为这是我从列表中添加的内容

//this is my primary concern
var posTransaction = dbContext.TPostransaction.Add(POSTransaction);
dbContext.TPostransactionDetail.AddRange(POSTransaction.TposTransactionDetail);
dbContext.SaveChanges();

这保存了 TPosTransaction 和 TPosTransactionDetail 的记录,但是正在保存的细节只有一个,而不是 2。我尝试删除 AddRange 部分它仍然在我的 TposTransactionDetail 中保存一条记录。

【问题讨论】:

  • 而不是顶部的_posTransactionDetail = new TPostransactionDetail();,在foreach循环的每次迭代中声明TPostransactionDetail。foreach (ListViewItem orders in lvOrders.Items) {var details = new TPostransactionDetail(); ...... _posTransactionDetails.Add(details);}

标签: c# entity-framework entity-framework-core


【解决方案1】:

在您需要创建新的 TPostransactionDetail 实例时,您只是在代码顶部重用该实例。

【讨论】:

  • 并手动将其添加到 TPostransactionDetail 的单独上下文中?
  • 因为我在想是否有一种方法可以为所有人执行一次 SaveChanges,为什么 AddRange 不起作用?
  • ef SaveChanges 是一个工作单元。它将保存为一个单元,您只需创建多个实例并将其添加到您的数据库集
  • 我很高兴卡巴扬
猜你喜欢
  • 2023-04-04
  • 2013-06-05
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多