在使用 entityframework 时,我看到方法 Remove
和 RemoveRange
的语法是
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/