【问题标题】:.RemoveRange Without fetching database records first in Entity Framework.RemoveRange 不先在实体框架中获取数据库记录
【发布时间】:2017-08-29 10:21:46
【问题描述】:

我正在使用 .RemoveRange 从数据库中删除多条记录,但为此我必须先获取所有记录,然后将它们传递给 .RemoveRange,但我想在不从数据库? 知道如何实现吗?

db.People.RemoveRange(just giving the ids or list of ids of people class);

【问题讨论】:

  • 尝试用new创建实体,分配ID,然后将其传递给函数。
  • 是的,这样做 List ra1 = new List(); ra1.Add(new ResidentAppointment { Id =ointmentId }); _context.ResidentAppointments.RemoveRange(ra1);但是由于在 objectstatemanager 中找不到该对象,因此出现无法删除该对象的错误。实体框架
  • 我有其他方法,但我想要它来自 .RemoveRange,因为它非常快并且做得很好。
  • 你要先附上实体,看看:stackoverflow.com/a/19422173/3936440
  • @ViRuSTriNiTy 。我通过先附加实体来做到这一点。谢谢它正在工作......

标签: c# .net entity-framework


【解决方案1】:

尝试使用EntityFramework.Extended库,用它你可以写:

db.People.Where(x => ids.Contains(x.Id)).Delete();

【讨论】:

  • 它会只调用一次数据库吗?这是一种快速的方法吗?
  • 这将首先从数据库中获取数据,这正是@Ali 试图避免的事情。
  • @AliNafees,是的,它不会从数据库中获取数据。你可以阅读this
  • @SlavaUtesinov 不会吧?您确定 .Where() 是一个条件吗?图书馆如何在不查看数据库的情况下知道存在哪些 ID。
  • @ViRuSTriNiTy 我也问过同样的问题,让我看看他的链接?
【解决方案2】:

先用new创建实体,分配ID,然后像这样附加实体

db.People.Attach({your_entity_created_with_new})

最后将实体传递给RemoveRange()

【讨论】:

  • 但这仅适用于 Primery 键,不适用于类中的其他属性。但工作正常......
  • 使用 EF Core 我什至不需要 Attach()。 RemoveRange() 就足够了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
相关资源
最近更新 更多