我想了解,使這個代碼,我從另一個問題SO解除工作機制:ObjectStateManager.GetObjectStateEntries()。Select()。OfType()如何工作?
List<ResourceType> ResourceTypes2 =
this.ObjectStateManager
.GetObjectStateEntries(EntityState.Added)
.Select(entry => entry.Entity)
.OfType<ResourceType>().ToList();
是一個對象的查詢或查詢EF上面?
我問的原因是我用它存儲> 100K行的表,我想確保它不必做某種行枚舉。
作爲一個側面的問題,我有什麼想法使用上述機制來實現一個Upsert工具,該工具通過讓客戶端代碼簡單地刪除然後添加到上下文中,但在保存時比較刪除和添加以實現更新該行已經存在?這將是一個「模式」,上下文被放入以避免副作用的語義。
對於內存中ObjectContext/StateManager數據結構上的對象(因爲它不像@ rich.okelly的答案中所解釋的那樣是'IQueryable')並且不會發出任何數據庫查詢。對於你的「Upsert」理念:我不認爲該程序有什麼好處,並且會說:不要保護客戶不理解如何正確使用EF。如果他們需要更新,他們應該使用該機制(從DB/Attach/ApplyCurrentValues加載/更改跟蹤等),而不是調用笨拙的DeleteObject/AddObject對。 – Slauma
也許我錯過了一些東西 - 我似乎是唯一一個我知道的厭惡輸入代碼反覆,看看是否已經存在一個對象,並添加它,如果是這樣,並更新它明智....這是繁瑣的樣板, 對? –