[英]How to update multiple records in a table Using the Linq for Entity Framework Core
我目前面臨更新數據庫中多條記錄的問題。 我想在用戶付款時創建收據時更新用戶創建的項目列表。
這是我更新它們的 API 方法。
[HttpPut("update-items")]
public ActionResult UpdateListOfItems(IEnumerable<ItemUpdateDTO> itemUpdateDTOs)
{
if(itemUpdateDTOs == null)
{
return BadRequest();
}
var items = _mapper.Map<IEnumerable<Item>>(itemUpdateDTOs);
_repository.UpdateRangeItem(items);
return Ok("Updated items!");
}
這是我的物品更新 DTO
public class ItemUpdateDTO
{
[Required]
public int ID { get; set; }
public FishUpdateDTO Fish { get; set; }
[Required]
public ReceiptUpdateDTO Receipt { get; set; }
}
這是表“Item”的實體模型
public class Item
{
[Key]
public int ID { get; set; }
[Required]
public int FishID { get; set; }
public Fish Fish { get; set; }
[Required]
public int QuantityOrdered { get; set; }
[Required]
public float TotalPrice { get; set; }
public Receipt Receipt { get; set; }
public User Customer { get; set; }
}
這是“類別”的實體模型
public class FishCategory
{
[Key]
[Required]
public int ID { get; set; }
[Required]
[MaxLength(50)]
public string Category { get; set; }
public IEnumerable<Fish> Fish { get; set; }
}
這是存儲庫方法。
public void UpdateRangeItem(IEnumerable<Item> items)
{
_databaseContext.Items.UpdateRange(items);
_databaseContext.SaveChanges();
}
這是項目表:
和收據表:
我正在嘗試使用收據 ID 作為項目表中的外鍵來更新項目表。 但是,我收到一個錯誤:
UPDATE 語句與 FOREIGN KEY 約束“FK_Fishes_Categories_CategoryID”沖突。 沖突發生在數據庫“EFishing”、表“dbo.Categories”、“ID”列中。
目前,我正在使用名為UpdateRange()
的DatabaseContext
方法在對數據庫的一次調用中更新一系列行。
任何解決方案都可以。 謝謝
該問題與一次多次更新 Items 無關。
正如 SQL 服務器告訴您的那樣,它與 Fish 和類別有關。
可能您的一個或多個項目上有一條魚,這條魚指向一個不存在的 FishCategory,因此違反了外鍵。
未設置但定義為不可為空的外鍵將采用值“0”(整數的默認值),並且如果您的 id 從 1 開始以同樣的方式失敗。 也許一個可為空的 FK 可能會有所幫助(如果它在數據方面有意義的話)。
驗證您的數據庫結構和您嘗試保存的數據:項目的魚屬性和魚的類別。
所以我知道已經晚了,但這是我的答案,它解決了我的問題。
由於問題出在此 ->
UPDATE 語句與 FOREIGN KEY 約束“FK_Fishes_Categories_CategoryID”沖突。 沖突發生在數據庫“EFishing”、表“dbo.Categories”、“ID”列中。
這是因為我的 Categories 表中不存在特定的 CategoryID,因此引發了該錯誤。 編譯器產生的錯誤可能不包含有用的消息,但檢查您發布的數據(可能使用 Postman),請檢查您的實體與之有關系的相關數據是否存在。
例如,如果我有
類別表 | 類別 ID | 分類 | | -------- | -------------- | | 1| 鹽水| | 2| 淡水|
這是魚桌| 魚ID| 姓名| 類別ID| |:---- |:------:| -----:| | 1| 三文魚| 1| 但是在 Postman 或您用來將數據發布到 API 的任何軟件中,如果您將“Fish”數據發布到“CategoryID”為 3 的 Fish 表,則會發生錯誤並按上述方式打印。 因此,請確保您在 Category 表中存在“CategoryID: 3”。
歸功於@AFract。 他在一些容易出錯的可能性中的回答高於我的回答。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.