![](/img/trans.png)
[英]Microsoft.EntityFrameworkCore.DbUpdateException: 'An error occurred while saving the entity changes. SqlException: Invalid column name 'UsersUserID'
[英]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.