簡體   English   中英

實體框架:刪除 c# 語法缺失的 WHERE (sqlite)

[英]entity framework: delete WHERE in c# syntax missing (sqlite)

我正在使用實體框架來更改遠程表上的數據。

我做的一個工作電話是這樣的:

public async Task<List<PictureItems>?> GetUserThumbnailByuserId(string userid)
{
    await InitializeAsync();
    try
    {
        return await _table.GetAsyncItems().Where(x => x.BelongsToUserId == userid).ToListAsync();
    }
    catch (Exception e)
    {
        return null;
    }
}

現在,我正在嘗試刪除 ID 匹配的項目。

但我能做的就是刪除正確的項目:

await _table.DeleteItemAsync(item);

但這只有在我將相同的項目插入 () 時才有效。 所以我可以獲得正確的項目,如果該項目不是 null 則插入到刪除中並刪除該項目。

但是當我已經在本地獲得 ID 時,我不想一直得到該項目,這只會造成不必要的流量。

所以我需要的是:

_table.DeleteItemAsync().Where(x => x.BelongsToUserId == userid).ToListAsync();

有人對我如何處理這個有任何幫助嗎?

最好,

如果您事先知道要刪除的項目的主 ID,則可以簡單地實例化一個僅包含該 ID 的 object 並將其傳遞給 EF Core:

table.Remove(new Entity() { Id = <yourId> });

這消除了首先查詢數據的需要——如果數據庫上已經存在,EF Core 將刪除具有相應 ID 屬性的相應現有項。

當然,這是否適用於您的情況取決於 BelongsToUserId 是否是 EF 可以使用的關鍵,或者它是否只是一個常規屬性。

您有幾種選擇:

  • 正如在其他答案中已經提到的,如果您知道要刪除的實體的主鍵,則可以在不查詢的情況下構造具有 ID 的空實體並調用DbContext.RemoveRange(entities);
  • 如果您准備嘗試或使用 EF Core v.7.0,則可以使用新的 ExecuteDelete 方法
  • 如果您知道自己在做什么並且對輸入的質量有信心:使用ExecuteSqlRaw並以這種方式手動刪除您想要的對象: DbContext.Database.ExecuteSqlRaw("DELETE FROM PictureItems WHERE...");
  • 使用支持 EF Core 批量刪除的(商業)擴展庫。 我通常避免推薦特定工具,但在 Google 中搜索“ef core bulk delete”會給出一些相關結果。 搜索一個開源類似物將我帶到這個應該滿足您需求的小型圖書館- 取自這個答案

暫無
暫無

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

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