Как сохранить в базе данных объект, который имеет список другого объекта, который несет его идентификатор в качестве внешнего ключа
Главный Объект
public class Order { [Key] public long OrderId { get; set; } public string OrderNumber { get; set; } public string CustomerId { get; set; } public int PaymentMethod { get; set; } public decimal GrandTotal { get; set; } public virtual ICollection<OrderItem> OrderItems { get; set; } }
Этот объект имеет OrderId в качестве внешнего ключа
public class OrderItem { [Key] public long OrderItemId { get; set; } public long OrderId { get; set; } public long ItemId { get; set; } public long Quantity { get; set; } [ForeignKey("ItemId")] public virtual Items Items { get; set; } [ForeignKey("OrderId")] public virtual Order Order { get; set; } }
Что я уже пробовал:
_context.Order.AddAsync(order); foreach(var item in order.OrderItems){ _context.OrderItems.AddAsync(item); } _context.SaveChangesAsync();
Это сообщение об ошибке, которое я всегда получал
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_OrderItems_Orders_OrderId". The conflict occurred in database "flavehub", table "dbo.Orders", column 'OrderId'. The statement has been terminated. Stack trace at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection connection) at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(DbContext _, ValueTuple`2 parameters) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded) at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(IEnumerable`1 commandBatches, IRelationalConnection connection) at Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IList`1 entries) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IList`1 entriesToSave) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess) at Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess) at Microsoft.EntityFrameworkCore.DbContext.SaveChanges() at flavehub.Repository.ServiceImplementation.OrderItemService.CreateOrderAsync(AddOrderReqObj order) in C:\M_Projs\flavehub\Repository\ServiceImplementation\OrderItemService.cs:line 42
CHill60
Возможно, вам нужно _context.SaveChangesAsync();
после добавления заказа убедитесь, что он действительно существует, прежде чем пытаться сохранить элементы для него
Member 14795653
Я тоже пробовал это делать, но все равно получаю ту же ошибку