簡體   English   中英

錯誤:在 .NET 中保存實體更改時出錯

[英]Error: An error occurred while saving the entity changes in .NET

當我將數據發布到我的 API 時出現此錯誤:

An error occurred while saving the entity changes. See the inner exception for details.
 
---> Microsoft.Data.SqlClient.SqlException (0x80131904): 

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_OrderLine_Order_OrderID". 

The conflict occurred in database "AnimimoMicroservicesNewOrderServiceContext-feca99ec-8feb-4680-b1f5-f1a32825a8c1", table "dbo.Order", column 'OrderID'.

這是我將 model 發布到數據庫的 HttpPost 方法:

// POST: api/Orders
        [HttpPost]
        public async Task<ActionResult<Order>> PostOrder(PostOrderDTO postOrderDto)
        {

            var order = new Order(postOrderDto.Identifier, postOrderDto.Customer);

            var json = JsonConvert.SerializeObject(order);

            var content = new StringContent(json, Encoding.UTF8, "application/json");

            _context.Order.Add(order);

            var basket = await GetBasketItems(postOrderDto.Identifier);
            var newOrderId = order.OrderID;

            foreach (var item in basket.Items)
            {
                var orderLine = new OrderLine
                {
                    OrderID = newOrderId,
                    ProductId = item.ProductId,
                    Quantity = item.Quantity
                };

                _context.OrderLine.Add(orderLine);
            };

            await _context.SaveChangesAsync();

            return CreatedAtAction("GetOrder", new { id = order.OrderID }, order);
        }

'OrderID' 是在發布到 Order 時自動生成的,但我也需要將相同生成的 OrderID 發布並保存在 OrderLine 中,這是我的 Order 數據庫的樣子: OrderDB所以當我發布並保存到時生成的 OrderID Order 是我想要訪問的 OrderLine DB,它在我的數據庫中看起來像這樣: OrderLineDB

它只說 NULL,然后我在 POST 方法中嘗試了上面的以下代碼來發布 OrderID,但得到了上述錯誤,我正在嘗試解決這個問題

這是我的 Order.cs model:

public class Order
    {
        public Order(int orderID, string identifier, string customer)
        {
            OrderID = orderID;
            Identifier = identifier;
            Customer = customer;
        }

        public Order(string identifier, string customer)
        {
            Identifier = identifier;
            Customer = customer;
        }

        [Key]
        public int OrderID { get; set; }
        public string Identifier { get; set; }

        public string Customer { get; set; }

        //[NotMapped]
        public IEnumerable<OrderLine> Items { get; set; } = new List<OrderLine>();
    }

Order.cs model 中的“OrderID”是 OrderLine 表的外鍵,如下所示:

public class OrderLine
    {
        public int Id { get; set; }
        public int OrderID { get; set; }
        public int ProductId { get; set; }
        public int Quantity { get; set; }
    }

我該如何解決? 我希望使用相同的 Post 方法將生成的 Order 表的 OrderID 發布到我的 OrderLine 表,但我只收到上述錯誤,我可以解決這個問題嗎? 感謝您提前提供任何幫助

添加訂單時,您沒有保存更改。 這意味着訂單 object 還沒有 id。 如果在_context.Order.Add(order);之后保存在將 id 添加到訂單行之前,這將得到解決。

你必須修復導航屬性

public class OrderLine
    {
        public int Id { get; set; }
       public int Quantity { get; set; }

        public int OrderID { get; set; }
        public int ProductId { get; set; }

         public  virtual Order Order { get; set; }
        public virtual Product { get; set; }
       
    }

並在代碼中刪除 _context.Order.Add(order);

            var basket = await GetBasketItems(postOrderDto.Identifier);
  
            foreach (var item in basket.Items)
            {
                var orderLine = new OrderLine
                {
                    Order = order,
                    ProductId = item.ProductId,
                    Quantity = item.Quantity
                };

                _context.OrderLine.Add(orderLine);
            };

            await _context.SaveChangesAsync();

只是出於好奇,這是為了什么?

var json = JsonConvert.SerializeObject(order);
 var content = new StringContent(json, Encoding.UTF8, "application/json");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM