簡體   English   中英

EF DbContext VS會話生存期

[英]EF DbContext VS Session lifetime

我首先將Entity Framework代碼用於電子商務網站。 我想在會議上存放籃子。 我正在使用Ninject來管理DbContext的生命周期,並且已將其范圍設置為每個請求。

我的問題是,由於購物籃的生存期是每個會話的,但DbContext的生存期是每個請求的-因此,購物籃沒有附加到每個請求的新DbContext實例。

我可以在每個請求上重新實例化籃子,但這似乎效率很低,因為它將為每個請求獲取所有籃子的詳細信息。

我可以在每個請求開始時重新附加會話的籃子。 從我看來,這似乎是最好的解決方案。

建議如何處理這種情況?

我發現了其他有關DbContext范圍的問題/帖子,建議是使用IOC容器對每個請求使用相同的DbContext。 我已經在執行此操作-對於如何將每個請求的DbContext附加到會話狀態中的實體的較長生命期,我還沒有真正找到答案。

推薦的方法是不將持久性對象存儲在購物籃中,而是將一些POCO(普通對象)存儲在籃子中:

  • 可用於有效顯示籃子的內容
  • 仍然包含數據庫ID,以便在接受訂單后,您可以使用ID來檢索數據庫上下文的當前實例中的數據庫實體。

附加和重新附加持久性對象可能可行,但是,當您最終擁有一個應用程序服務器場並決定將會話持久存儲在數據庫中時,持久性對象將必須序列化和反序列化,這可能導致其他子問題(只要您的會話由Inproc會話提供程序持久保存,您沒有看到這些問題)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM