2013-06-18 27 views
0

我有一個Web API使用實體框架DBContext來執行CRUD操作。我的問題如下:如何最好地利用Web API應用程序的DBContext

最初,我使用了我的DBContext的一個靜態實例。但是,使用這種格式時,當我再次查詢數據集時,數據庫表的任何更改都不會顯示;數據是陳舊的。

作爲一個臨時修復,在我所有公共類函數的開始,我創建一個新的DBContext對象並調用該對象以從數據庫中獲取數據。由於許多原因,這不是最好的主意。但是,當我使用這種技術時,數據不再陳舊。

如何正確使用DBContext以便多個用戶始終能夠從請求中看到當前數據庫數據?我應該把DBContext作爲一個字段放在我的類中,並在類的構造函數中實例化它?在這種情況下,每個類應該有自己的DBContext對象嗎?

是否有適當使用DBContext的最佳做法?我擔心陳舊的數據和推送給我的用戶的結果不準確。

+0

當您對數據庫進行更改時,是在相同的靜態DbContext中還是以其他方式執行此操作? –

+0

我通過調用Web API來檢查表中的值。 Web API返回數據。例如,該值可能是451.然後,我使用SSMS直接在表中輸入一個新值,以更改數據庫。當我再次運行我的API調用時,在將數據輸入數據庫後,API將返回舊值而不是剛輸入的新值。這發生在我使用靜態DBContext時。如果我每次調用API時創建一個新的DBContext,那麼API會將我輸入到表中的新數據返回。 – user42

回答

2

DbContext不是線程安全的,因此使其成爲靜態對於服務器代碼來說不是一件好事。創建DbContext的開銷很低,所以我不明白爲什麼我們必須避免使其變爲實例變量。

1

還應該指出,實體框架緩存數據。如果直接在數據庫中對緩存數據進行更改,則在您創建新的DbContext或將底層ObjectContext告知Refresh之前,Entity Framework將不會看到這些更改。

相關問題