c# - 为什么 Entity Framework Remove vs RemoveRange 返回类型不是 void 或 bool

标签 c# entity-framework

在使用 entityframework 时,我看到方法 RemoveRemoveRange 的语法是

public virtual TEntity Remove(TEntity entity);

public virtual IEnumerable<TEntity> RemoveRange(IEnumerable<TEntity> entities);

只是我们期望返回类型是一个bool;这表明实体是否成功删除。 现在,如果它确实返回了这些值,那么在某些情况下它可能会有用。

我认为 RemoveRange 会返回已成功删除的实体列表。在这种情况下,可以检查哪些实体从列表中删除为

var db = new MyDataContext();
var itemsToRemove = db.MySet.Where(x => !x.active);
var removedItems = db.MySet.RemoveRange(itemsToRemove);

并使用 removedItems 列表来显示成功移除的项目。

我不明白我是否应该捕捉那个返回值。是否有任何特定场景需要捕获和使用这些方法的返回值?

最佳答案

如果你看code ,您会看到它返回相同的对象:

public virtual TEntity Remove(TEntity entity)
{
  Check.NotNull<TEntity>(entity, "entity");
  this.GetInternalSetWithCheck("Remove").Remove((object) entity);
  return entity;
}

我认为,这主要是因为他们可以做到。因此,您无法在 Remove 方法之后捕获结果。

但我可以想象这样的情况:你需要在删除后对实体做一些事情:

void LogEntity<TEntity>(TEntity entity)
{
    //...log
}

void Method(User user)
{
    LogEntity(context.Set<User>().Remove(user));
}

代替:

void Method(User user)
{
    context.Set<User>().Remove(user);
    LogEntity(user);
}

关于c# - 为什么 Entity Framework Remove vs RemoveRange 返回类型不是 void 或 bool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32761881/

相关文章:

c# - Entity Framework 在应用 Where 过滤器时是否选择内存中的所有行?

c# - EF 减少嵌套类型的外部连接

c# - Visual Studio - 默认代码生成被禁用

c# - 如何在具有条件多个 where 条件的 Entity Framework 中编写查询?

c# - 我们需要使用 SqlCommand 还是仅用于 SqlConnection 和 SqlDataReader

c# - C# 中的 Fiddler 样式应用程序

c# - 查找 IEnumerable 的第一个索引

c# - MudBlazor UI 库颜色

entity-framework - Entity Framework 代码优先 : Initializing a Database using Console Application

c# - 如何使用 LINQ to SQL 从 ID 值列表中获取结果列表?