我正在使用Entity Framework 4.1。我已經使用大量的在線示例實現了一個基礎知識庫。我的存儲庫get方法使用bool參數來決定是否跟蹤實體。有時,我想加載一個實體並在其他時間跟蹤它,對於某些實體,我只想讀取它們並顯示它們(即在圖中)。在這種情況下,永遠不需要編輯,所以我不想追蹤它們的開銷。此外,圖形實體被髮送到Silverlight客戶端,因此實體與上下文斷開連接。因此,我的Get方法可以返回被跟蹤或不跟蹤的實體列表。這是動態創建查詢所實現的,如下所示:是否可以判斷一個實體是否被跟蹤?
DbQuery<E> query = Context.Set<E>();
// Track the entities in the context?
if (!trackEntities)
{
query = query.AsNoTracking();
}
但是,我現在想要讓用戶與圖形進行交互並對其進行編輯。這不會經常發生,所以我仍然想要一些實體沒有跟蹤它們,但有能力保存它們。爲此,我只需將它們附加到上下文並將狀態設置爲已修改。一切工作到目前爲止。
我正在通過重寫SaveChanges方法來審計任何更改。正如上面所解釋的,在一些較低的情況下,我可能需要保存已斷開連接的已修改的實體。因此,爲了進行審計,我必須從數據庫中檢索當前值,然後進行比較以確定斷開連接時發生了什麼變化。如果實體已被跟蹤,則不需要獲取舊值,因爲我可以通過州政府經理訪問它們。我沒有使用自我跟蹤實體,因爲這對我的需求來說太過分了。
問題:在我的審計方法中,我只想知道修改的實體是否被跟蹤,即是否需要轉到db並獲取原始值?
乾杯
謝謝帕維爾 - 完美的工作! – rockshire