2017-01-16 133 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()

希望這會有所幫助。