2017-01-16 128 views
2

实体知识问题。考虑下面的代码:删除并查询,无DbContext.SaveChanges

... 
var entitiesToRemove = dbSet.Where (entity => entity.TimeToLive > 5); 
dbSet.RemoveRange(entitiesToRemove); 
var resultEntities = dbSet.Where(entity => /* some condition that will also match before deleted entities*/); 
... 

问:请问事先删除实体也被列入resultEntities与否? dbSet.RemoveRange之后是否需要拨打DbContext.SaveChanges

THX

回答

1

在进一步处理之前,您需要先执行dbcontext.SaveChanges()。 在dbSet.RemoveRange(entitiesToRemove)中,EF只是标记了要删除的实体。只有在您调用SaveChanges()后才会反映到db。

1

是的,我认为DbContext.SaveChanges应该去后dbSet.RemoveRange

1

是的,事先删除的实体将包含在resultEntities。因为,RemoveRange没有得到反映到数据库。然后,当您获得resultEntites的结果时,您正在查询数据库,因此它也会导致删除的值。

如果你不想删除的值出现,那么你应该在RemoveRange之后调用Dbcontext.Savechanges()

希望这会有所帮助。