HTTP是無狀態的。您的工作單元僅存在於服務器端。至於點擊'加載',那麼你的UOW只是簡單地檢索記錄並映射到你的視圖模型。 '保存'和工作單元在您打開服務器時開始 - 而不是在加載過程中,在瀏覽器中編輯,然後返回到服務器。
明智的實現你不應該在內存中保留ISession(在你的情況下,ASP.Net會話對象),它是一個用盡內存和非託管ado.net資源的快速方法。有些人選擇在begin_request中將ISession與HTTP Context關聯起來,並在end_request上進行處理,各種UOW示例當然可以更細化,但在所有情況下,它永遠不會比這更進一步存在。
在一個簡單系統中,點擊'保存'時,您需要使用ID(隱藏字段或不是什麼)將產品從數據庫中拉出來,從Request.Form中設置屬性,然後更新數據庫。
至於併發性。如果您錄製的時間戳或增量版本在一個隱藏字段
<input type="hidden" name="version" value="12"/>
然後,當你點擊保存,你拉出來的產品數據庫,檢查中的Request.Form匹配的版本號,然後保存,如果不向用戶返回自上次檢索以來數據已更改,是否要繼續? NHibernate具有時間戳/版本字段,因此當您實際將數據庫命中「更新」中的where子句時會進行比較,因此在這種情況下,它甚至可以說明您提交時的變化。
有更復雜和更復雜的方法,但通常你不能/不應該在你的asp.net會話對象中粘住ISession。
沒有考慮web應用程序。我想知道winform應用程序。對不起,我沒有在我的問題中指定 – codemnky 2009-07-12 05:11:00