C# 无法从ASP.NET MVC项目插入到PostgreSQL表
所以我有一个大学的小型汽车店项目,当我想下订单时,我得到了这个: Microsoft.EntityFrameworkCore.DbUpdateException:'更新条目时出错。有关详细信息,请参阅内部异常。” PostgresException:23503:对表OrderDetail的插入或更新违反外键约束FK\U OrderDetail\U orderId 我使用.NETCore3.0.1和PostgreSQL 4.1.2。 数据库部署在heroku上 导致故障的代码段: 订单详细信息模型: 订单型号:C# 无法从ASP.NET MVC项目插入到PostgreSQL表,c#,sql,asp.net,asp.net-mvc,postgresql,C#,Sql,Asp.net,Asp.net Mvc,Postgresql,所以我有一个大学的小型汽车店项目,当我想下订单时,我得到了这个: Microsoft.EntityFrameworkCore.DbUpdateException:'更新条目时出错。有关详细信息,请参阅内部异常。” PostgresException:23503:对表OrderDetail的插入或更新违反外键约束FK\U OrderDetail\U orderId 我使用.NETCore3.0.1和PostgreSQL 4.1.2。 数据库部署在heroku上 导致故障的代码段: 订单详细信息模型
我已经尝试修复了几天,但仍然无法找出问题所在,如果你们中的一些人能够帮助我,那就太好了:订单在保存到数据库之前不包含ID。不要在详细信息模型中设置orderId,而是在订单模型中设置导航属性Detail。订单在保存到数据库之前不包含ID。在订单模型中设置导航属性Detail,而不是在details模型中设置orderId。
namespace Shop.Data.Repository
{
public class OrdersRepository : IAllOrders
{
private readonly AppDBContent appDBContent;
private readonly ShopCart shopCart;
public OrdersRepository(AppDBContent appDBContent, ShopCart shopCart)
{
this.appDBContent = appDBContent;
this.shopCart = shopCart;
}
public void createOrder(Order order)
{
order.orderTime = DateTime.Now;
appDBContent.Order.Add(order);
var items = shopCart.listShopItems;
var orderDetail = new OrderDetail();
orderDetail.orderId = order.id;
foreach (var car in items)
{
orderDetail.carId = car.car.id;
orderDetail.price = car.car.price;
}
appDBContent.OrderDetail.Add(orderDetail);
appDBContent.SaveChanges();
}
}
}
namespace Shop.Data.Models
{
public class OrderDetail
{
public int id { get; set; }
public int orderId { get; set; }
public int carId { get; set; }
public int price { get; set; }
public virtual Car car { get; set; }
public virtual Order order { get; set; }
}
}
namespace Shop.Data.Models
{
public class Order
{
[BindNever]
public int id { get; set; }
public string name { get; set; }
public string surname { get; set; }
public string address { get; set; }
public string phone { get; set; }
public string email { get; set; }
public DateTime orderTime { get; set; }
public List<OrderDetail> orderDetails { get; set; }
}
}
namespace Shop.Controllers
{
public class OrderController : Controller
{
private readonly IAllOrders allOrders;
private readonly ShopCart shopCart;
public OrderController(IAllOrders allOrders, ShopCart shopCart)
{
this.allOrders = allOrders;
this.shopCart = shopCart;
}
public IActionResult Checkout()
{
return View();
}
[HttpPost]
public IActionResult Checkout(Order order)
{
shopCart.listShopItems = shopCart.getShopItems();
if (shopCart.listShopItems.Count == 0)
ModelState.AddModelError("", "You have no items in your cart!");
if (ModelState.IsValid)
{
allOrders.createOrder(order);
return RedirectToAction("Complete");
}
return View(order);
}
public IActionResult Complete()
{
ViewBag.Message = "Your order was processed successfully";
return View();
}
}
}