为什么entityframework删除& RemoveRange返回类型不是void或bool

时间:2015-09-24 12:54:38

标签: 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列表显示已成功删除的项目。

我不明白我是否应该捕获返回值。是否存在需要捕获和使用这些方法的返回值的特定方案?

1 个答案:

答案 0 :(得分:3)

如果查看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);
}