對於針對現有上下文運行查詢的大多數ORM,它不會返回自數據庫首次返回對象以來發生更改的數據。它將查詢發佈到數據庫,但不會返回對數據庫所做的任何更改,因爲上下文不希望踩到對象(有關Linq到SQL中的這種行爲的討論,請參閱here)。對於使用工作單元模式的短期上下文來說這很好,但如果你使用長壽命的上下文,那麼這種情況就不那麼好了。
我已經嘗試Linq SQL和實體框架,這兩個框架提供了一種刷新方法,可以讓你指定一個枚舉參數來覆蓋上下文中的現有對象,但這不會拿起新的記錄(至少不是沒有額外的查詢),更重要的是不會刪除已從數據庫中刪除的記錄的對象。
我知道我可以放棄上下文和現有的對象,但我不想這樣做,因爲對象綁定到應用程序中的其他元素。
是否有任何ORM能夠使用數據庫的最新數據刷新對象,爲新創建的對象添加對象並刪除已從數據庫中刪除的記錄的對象,理想情況下以高效方式(即使用MS SQL rowversion列)。