當我將資料發布到我的 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'.
這是我將模型發布到資料庫的 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 模型:
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 模型中的“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 表,但我只收到上述錯誤,我可以解決這個問題嗎?提前感謝您的任何幫助
uj5u.com熱心網友回復:
添加訂單時,您沒有保存更改。這意味著訂單物件還沒有 id。如果您_context.Order.Add(order);在將 id 添加到訂單行之后和之前保存,這將得到解決。
uj5u.com熱心網友回復:
你必須修復導航屬性
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");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/404841.html
標籤:
