0
假設我有一個客戶正在填寫網站的數據。使用的基礎持久性是Nhibernate。nhibernate和asp.net的有狀態會話
現在的一系列事件是這樣的
- 用戶填寫了表格。
- 他提交表格。
- nhibernate sessionfactory創建並通過客戶對象將其保存到數據庫。
- 數據庫使用nhibernate的本地生成器提交會話對象
- 但是在服務器的響應到達客戶端之前發生了一個事故。與客戶端的連接關閉。
- 客戶端看到頁面未找到錯誤或請求超時錯誤。並有一個困境,他尚未註冊。
- 所以他再次按下刷新按鈕。並且相同的數據集(儘管已提交給數據庫)已發送到服務器以進行數據庫提交。
- 服務器看到數據並再次向不同的id註冊同一個客戶。
- 所以問題就像。現在相同的客戶條目已被重複兩次,導致連接中斷。
現在有人可以告訴我如何進入這種情況。因此,即使客戶提交,他只能識別一個條目並提交,即使響應已被切斷並按下了刷新按鈕?
第4點可以請你給一個虛擬的例子代碼?我其實並不瞭解這個概念,但還沒有實現,我沒有使用任何MVC,只是簡單的asp.net 3.5,所以如果你可以使用一個控制器方法,如果你可以提供一個虛擬代碼。這將是一個非常有用的:(對不起,詢問優惠,但真的不知道如何實施 – Joy 2011-06-16 04:42:03
不必控制器 - 編輯說高層次的方法 - 例如在Page_Load。因此,Page_Load應打開交易,檢查數據庫查看用戶是否已經註冊,如果沒有,保存新的用戶詳細信息,然後提交事務和Response.Redirect到指示註冊成功的頁面。 – BonyT 2011-06-16 08:54:52
你的意思是我應該實現ihttpModule,然後使用一些有點context.beginrequest事件內部做它的工作..然後檢查會話是否已經存在..它只會更新該會話,否則它會說用戶已經存在。 ..之後,當其context.endrequest事件時,它將簡單地清除本地會話。這是你想說的方式嗎?我搜索了一下,發現這個鏈接到了你所說的情況。 http://adammatusiak.blogspot.com/2010/03/binding-fluent-nhibernate-session-to.html – Joy 2011-06-17 04:08:36