2012-09-06 34 views
0

我有Session.Load和Session.Get的想法,但想知道它的實時實現。假設存在具有n:1關係的公司和位置表。在公司編輯頁面中,用戶選擇一個位置並提交頁面。通過使用下面的代碼,它會被連接而不會觸及數據庫。NHibernate Session.Load或Session.Get

cust.Location = session.Load<Location>(selectedlocationid) 

但是與此同時,如果其他用戶在此期間刪除了位置,則可能會發生異常。這種情況甚至可能發生在ADO.NET/Entity框架中,因爲我們只是在不檢查存在的情況下更新id。

我想知道一般如何更新這個簡單的情況。由於Web應用程序具有斷開連接的體系結構,可以忽略這種可能性並使用「Load」(或)使用「Get」命中db並檢查空值並繼續。

回答

0

在刪除之前不能鎖定行,因爲在查看刪除行和實際刪除行之間可能會有很多延遲。
不鎖定行是optimistic concurrency

在數據庫級執行您的foreign key關係,以便它不會允許與刪除的行關聯。這樣,如果有人刪除了該行,您的代碼將引發異常。

您可以捕獲該異常並相應地提醒用戶。

+0

我的不好,我想我太想了。我完全忘記了參照整合。感謝您的回覆。 – Sunny

相關問題