Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法从ASP.NET MVC项目插入到PostgreSQL表_C#_Sql_Asp.net_Asp.net Mvc_Postgresql - Fatal编程技术网

C# 无法从ASP.NET MVC项目插入到PostgreSQL表

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上 导致故障的代码段: 订单详细信息模型

所以我有一个大学的小型汽车店项目,当我想下订单时,我得到了这个:

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();
        }
    }
}