簡體   English   中英

如何使用 Entity Framework Core 的 Linq 更新表中的多個記錄

[英]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.

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