c# - 使用实体框架将 OrderDetail 添加到数据库
问题描述
我正在使用 .NET Core 制作咖啡店应用程序。
我有OrderHeader
和OrderDetail
实体。我为它们创建了模型类,OrderHeader
并OrderDetail
使用外键连接它们。在控制器中,当我尝试将数据保存到OrderHeader
时,OrderDetail
会发生注释。
这是我的代码:
[HttpPost]
[ValidateAntiForgeryToken]
[ActionName("Summary")]
public IActionResult SummaryPost(ProductUserVM ProductUserVM)
{
var claimsIdentity = (ClaimsIdentity)User.Identity;
var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);
OrderHeader orderHeader = new OrderHeader()
{
ApplicationUserId = claim.Value,
FullName = ProductUserVM.ApplicationUser.FullName,
OrderDate = DateTime.Now
};
_db.OrderHeader.Add(orderHeader);
_db.SaveChanges();
foreach(var prod in ProductUserVM.ProductList)
{
OrderDetail orderDetail = new OrderDetail()
{
OrderHeaderId = orderHeader.Id,
ProductId = prod.Id
};
_db.OrderDetail.Add(orderDetail);
}
_db.SaveChanges();
return RedirectToAction(nameof(Confirmation));
}
有人可以解释发生了什么吗?
解决方案
您不想引用 ,而是Id
要引用整个对象。
将OrderDetail
作为集合添加到OrderHeader
.
public class OrderHeader {
// other properties
public virtual IColletion<OrderDetail> OrderDetail { get; set; }
}
并将其添加OrderHeader
到OrderDetail
:
public class OrderDetail {
// other properties
public virtual OrderHeader OrderHeader { get; set; }
}
如果您已经这样做了,请继续下面。
现在,不要使用 来创建新OrderDetail
的OrderHeaderId
,而是添加对的引用OrderHeader
。
foreach (var prod in ProductUserVM.ProductList)
{
OrderDetail orderDetail = new OrderDetail()
{
OrderHeader = orderHeader,
ProductId = prod.Id
};
_db.OrderDetail.Add(orderDetail);
}
推荐阅读
- objective-c - 新来的迅速。如何创建或更新视图
- .net - 如何将此 .Net Post 函数转换为 VBA?
- php - 获取真实网址和真实内容的简单机器人
- javascript - Web 音频 API - 可以使振荡器的特定 LR 通道失谐吗?
- visual-studio - 无法更新当我使用 Visual Studio 安装程序更新新版本时(例如 15.7.* 到 15.9.* 或直到现在)
- java - 如何使用 TCP 套接字在 Java 和 Python 之间持续通信
- mysql - 向数据库添加数据时如何修复未找到列错误 [SQLSTATE[42S22]]
- gnuplot - 我的 gnuplot 适合度非常差,我该如何改进它?
- android - 预填充数据库的游标计数始终为 0
- javascript - npm table 不会填充 cli 命令行表?