我正在使用。net Core制作Coffee Shop应用程序。
我有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; }
}
如果你已经这样做了,继续下面的
现在不是用OrderHeaderId
创建一个新的OrderDetail
,而是添加一个对OrderHeader
的引用。
foreach (var prod in ProductUserVM.ProductList)
{
OrderDetail orderDetail = new OrderDetail()
{
OrderHeader = orderHeader,
ProductId = prod.Id
};
_db.OrderDetail.Add(orderDetail);
}
关系文档
是的,但是看看我的模型:
OrderHeader模型public class OrderHeader
{
[Key]
public int Id { get; set; }
public string ApplicationUserId { get; set; }
[ForeignKey("ApplicationUserId")]
public ApplicationUser ApplicationUser { get; set; }
public DateTime OrderDate { get; set; }
[Required]
public string FullName { get; set; }
}
和OrderDetail模型:
public class OrderDetail
{
[Key]
public int Id { get; set; }
public int OrderHeaderId { get; set; }
[ForeignKey("OrderHeaderId")]
public virtual OrderHeader OrderHeader { get; set; }
public int ProductId { get; set; }
[ForeignKey("ProductId")]
public virtual Product Product { get; set; }
}