Написал сайт на 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; }
}
}
Вставь appDBContent.SaveChanges()
после строки
appDBContent.Order.Add(order);
Здесь пояснение: ASP.NET the insert statement conflicted with the foreign key constraint
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_OrderDetail_Order_orderId"
Значит, что у вас проблема с ключем на order_id
. Скорее всего, вы пытаетесь вставить запись с таким order_id, которого не существует.
Поэтому FK не на что ссылаться.
В OrderRepository
в методе CreateOrder
нужно добавить appDBContent.SaveChanges();
после appDBContent.Order.Add(order);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть Windows Forms приложение, там есть разный функционал и одна из функций - запуск написанного кодаДля этого есть несколько кнопок: открыть,...
Всем добрый деньХочу настроить логирование сервиса в БД Postgres с помощью ILogger