繁体   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