在使用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
列表显示已成功删除的项目。
我不明白我是否应该捕获返回值。是否存在需要捕获和使用这些方法的返回值的特定方案?
答案 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);
}