c# - 无法从 ASP.NET MVC 项目插入 PostgreSQL 表
问题描述
所以我有这个大学的小型汽车店项目,当我想下订单时,我得到了这个:
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。
推荐阅读
- arm - 检测 Thumb-2 指令和 PC 偏移的位置
- matlab - 找到线性系统精确解的最快方法是什么,matlab
- c# - 为什么此 LINQ 表达式返回只有一项的子列表
- redux - Immutable.js:创建一个包含一个元素的列表
- javascript - 触发 Modal 以在 useEffect 挂钩内显示的问题
- javascript - AWS Lambda 函数:无法读取未定义的属性 'logs' 'numberOfPages' 'stream'。包问题或 AWS Lambda 问题?
- html - 如何使用 CSS 隐藏行中的内联元素溢出?
- mysql - 如何允许我的团队成员访问我的 AWS mySQL 数据库?
- python - 如何在数据框中选择 NaN 单元格?
- reactjs - 开玩笑测试未通过创建反应应用程序