INSERT statement conflicted with FOREIGN KEY

196
10 апреля 2022, 22:20

Написал сайт на ASP.NET по видеоурокам Гоши Дударя, и столкнулся с ошибкой следующего вида: SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_OrderDetail_Order_orderId". The conflict occurred in database "Shop", table "dbo.Order", column 'id'. В коде ошибок нету, только вызывается это исключение во время оформления заказа

Код:

using Shop.Data.Interfaces;
using Shop.Data.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
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;
            foreach(var el in items)
            {
                var orderDetail = new OrderDetail()
                {
                    carId = el.car.id,
                    orderId = order.id,
                    price = el.car.price
                };
                appDBContent.OrderDetail.Add(orderDetail);
            }
            appDBContent.SaveChanges();
        }
    }
}

Модель Order:

using Microsoft.AspNetCore.Mvc.ModelBinding;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace Shop.Data.Models
{
    public class Order
    {
        [BindNever]
        public int id { get; set; }
        [Display(Name="Введіть ім'я")]
        [StringLength(20)]
        [Required(ErrorMessage = "Довжина ім'я не менше 20 символів")]
        public string name { get; set; }
        [Display(Name = "Введіть прізвище")]
        [StringLength(20)]
        [Required(ErrorMessage = "Довжина прізвища не менше 20 символів")]
        public string surname { get; set; }
        [Display(Name = "Введіть адресу")]
        [StringLength(20)]
        [Required(ErrorMessage = "Довжина адреси не менше 20 символів")]
        public string address { get; set; }
        [Display(Name = "Введіть телефон")]
        [DataType(DataType.PhoneNumber)]
        [StringLength(10)]
        [Required(ErrorMessage = "Довжина телефона не менше 10 символів")]
        public string phone { get; set; }
        [Display(Name = "Введіть електронну пошту")]
        [DataType(DataType.EmailAddress)]
        [StringLength(30)]
        [Required(ErrorMessage = "Довжина електронної пошти не менше 30 символів")]
        public string email { get; set; }
        [BindNever]
        [ScaffoldColumn(false)]
        public DateTime orderTime { get; set; }
        public List<OrderDetail> orderDetails { get; set; }
    }
}

Модель OrderDetail:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Shop.Data.Models
{
    public class OrderDetail
    {
        public int id { get; set; }
        public int orderId { get; set; }
        public int carId { get; set; }
        public uint price { get; set; }
        public virtual Car car { get; set; }
        public virtual Order order { get; set; }
    }
}
Answer 1

Вставь appDBContent.SaveChanges() после строки

appDBContent.Order.Add(order);

Здесь пояснение: ASP.NET the insert statement conflicted with the foreign key constraint

Answer 2

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_OrderDetail_Order_orderId"

Значит, что у вас проблема с ключем на order_id. Скорее всего, вы пытаетесь вставить запись с таким order_id, которого не существует. Поэтому FK не на что ссылаться.

Answer 3

В OrderRepository в методе CreateOrder нужно добавить appDBContent.SaveChanges(); после appDBContent.Order.Add(order);

READ ALSO
Программное создание .cs файла

Программное создание .cs файла

У меня есть Windows Forms приложение, там есть разный функционал и одна из функций - запуск написанного кодаДля этого есть несколько кнопок: открыть,...

268
Запись логов в БД

Запись логов в БД

Всем добрый деньХочу настроить логирование сервиса в БД Postgres с помощью ILogger

232
Ненужное преобразование Decimal

Ненужное преобразование Decimal

Проблема состоит в следующем:

138