2010-08-13 85 views
0

讓我們假設我有一個可重用的業務層,進一步利用使用Entity Framework 4.0實現的數據訪問層。業務層返回/消費的實體是自我跟蹤的,允許我們使用這些類型的實體提供的所有好東西。在asp.net會話中存儲實體框架自我跟蹤實體,好主意?

我希望能夠跨職位背後存儲我工作的實體(爲了避免每次都重新查詢)。基本上讓我們假設我有一個帶有10個項目的分頁GridView,並且像DetailsView一樣編輯這些項目。每當您在網格中選擇一個新行時,詳細信息視圖會更新所選行的信息。我的首選是僅在頁面的初始請求中查詢實體並將其存儲在會話中。隨後,我列出了一些實體,我可以使用這些實體並最終修改並將所有更改發送回業務層。

我真的很想使用會話而不是視圖狀態來減少頁面負載(自我跟蹤實體很重)但是我真的很喜歡這種狀態,因爲當用戶離開頁面時沒有剩餘效應。

一些強說愁我的事情是:

  1. 當用戶從導航頁面到另一個頁面,距前一頁面的實體仍在開會。我總是可以在頁面加載時做一些事情來做家務工作。不知道這是不是很好的做法。
  2. 我很擔心人們打開瀏覽器標籤並將兩個視圖放入同一頁面,這似乎可能會造成問題。
  3. 這是一個很好的方法嗎?好像我試圖擁有所有世界上最好的東西,只需要簡單地重新查詢實體的每個帖子並支付數據庫旅程的50-100ms命中時間,肯定會容易得多。

您的想法非常感謝。

回答

1

攻擊回到數據庫。如果您的網站流量很低,可以讓您考慮在會話中堅持這一點,那麼查詢命中即可。

還有一個好處是,你可以有更簡單的併發檢查,並且當有人打開兩個選項卡時,你也不會遇到上面提到的會話「交叉」問題。

1

如果您要訪問數據庫,那麼您幾乎可以忽略自我跟蹤實體的優勢,該實體有能力在objectcontext不在時跟蹤更改。因此asp.net無狀態場景對於STE來說是一個很好的選擇。我認爲你只需要保持一個實體的狀態,即你正在編輯的實體不應該那麼沉重。你可以選擇Session,但我從來不喜歡會議,因爲你提到的原因。當一些事情懸而未決時,它會造成很多錯誤。