2011-08-02 37 views
1

在這裏,我們有幾個項目使用ASP.Net MVC,jQuery,LinqToSql和StructureMap。ASP.NET MVC - 工作單元vs會話

假設我有這種情況:公司編輯頁面。此頁面有2個選項卡:詳細信息和員工。詳細信息只是公司的詳細信息,如姓名,電話等。在員工選項卡中,我有一個jQuery網格將所有公司員工。這些員工來自會話,因爲用戶可以編輯員工,刪除等,所有這些修改都將設置在同一個會話中。而且,用戶可以多次編輯他想要的員工,添加新員工,刪除這個新員工等等。

在此頁面的底部,我有「保存」和「取消」按鈕。單擊保存時,我從會話中獲得員工並保存到數據庫。這種工作。

有一天,一些同事說我們應該放棄使用Session並開始使用Unit of Work。所以,我開始閱讀一些文章,博客等。

到目前爲止,我不明白的是我如何使用會話刪除,並開始使用UoW來保存所有數據......以正確保存用戶在頁面中執行的所有操作。

到目前爲止我還沒有找到任何實用的方法。

在此先感謝!

+0

我不明白。你的員工數據來自會議?開始時它是如何進入會議的?這是一個非常糟糕的選擇,因爲兩個用戶可以同時使用它,一個可以編輯員工,但另一個用戶將獲得舊數據,如果他們編輯同一用戶,則會覆蓋另一個用戶的更改。 –

+0

是的,它來自會議。我無意詳細討論會議的進展情況,這是一個糟糕的選擇,用戶可以同時進行編輯等。我試圖弄清楚如何使用工作單元放棄使用所有這些會話。什麼是最好的技術等 – AndreMiranda

+0

@mystere。不,你錯了。會話不能被2個用戶訪問。會話對每個用戶都是唯一的。用戶會話只能由1個用戶訪問,因此在會話中存儲數據將永遠不會被其他用戶更改 –

回答

1

實際上,UoW只是一種堅持數據而不是替代會話的模式。 Session仍然會被使用,只是UoW將負責與NHibernate會話進行交互。一個典型的UOW實現可能是這個樣子:

public ActionResult Edit(Employee model) 
{ 
    using(IUnitOfWork uow = UnitOfWork.Start()) 
    { 
     employeeRepository.Save(model); 

     uow.Commit(); 
    } 

    return Json("Success); 
} 

在這裏,您明確地標記您的交易的邊界,而不是來回傳送會話。爲NHibernate實現UoW的好資源可以在here找到。

+0

有沒有可以替代這個臨時數據操作的wat?現在,我在操縱Session,但是有沒有辦法替代它? – AndreMiranda

+0

我不得不更多地瞭解你的架構。通常,會話不用於臨時存儲(特別是在Web應用程序中)。當你說Session時,你是指NHibernate Session還是其他一些商店? – lcranf

+0

ASP.NET會話。在員工選項卡中,所有員工都是從ASP.NET會話中加載的,因爲用戶可以自由管理員工,如刪除,編輯,最終用戶將點擊保存按鈕將所有公司數據保存到數據庫。爲了將員工數據保存到數據庫,我從員工會話中獲得。我沒有使用NHibernate。 LinqtoSql – AndreMiranda

0

我認爲你得到的是你想要一個façade類型的模式。您可以創建一個接口或基類來處理保存用戶數據的過程。然後創建一個使用會話的具體類。

當您想要更改爲工作單元或任何其他機制時,您只需創建一個新的具體實現&即可使用。你的代碼現在不知道你的數據保存在哪裏。

Simon