【发布时间】:2020-04-17 02:39:58
【问题描述】:
所以我有一个大学小汽车店项目,当我想下订单时,我得到了这个:
Microsoft.EntityFrameworkCore.DbUpdateException: '更新条目时出错。有关详细信息,请参阅内部异常。'
PostgresException: 23503: 在表“OrderDetail”上插入或更新违反了外键约束“FK_OrderDetail_Order_orderId”
我使用 .NET Core 3.0.1 和 PostgreSQL 4.1.2。 数据库部署在heroku上。
导致问题的那段代码:
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();
}
}
}
我已经尝试修复了几天,但仍然无法弄清楚是什么问题,如果你们中的一些人可以帮助我,那就太好了:)
【问题讨论】:
-
订单在保存到数据库之前不包含 ID。不要在细节模型中设置 orderId,而是在 Order 模型中设置导航属性 Detail。
标签: c# sql asp.net asp.net-mvc postgresql