2009-02-13 76 views
1

我有一個使用自然鍵(即面向業務的鍵)的數據庫。不幸的是,正因爲如此,這些對象的主鍵可能隨時間而改變。是否可以使用NHibernate更新/更改主鍵?

我目前正在研究使用NHibernate作爲這個數據庫的O/RM。但是,在我的測試中,我注意到沒有明顯的方法來更改對象的主鍵並將其保存到數據庫。

例如,說我有一個「商業」的對象以「BusinessCode」,因爲它的主鍵:

public class Business 
{ 
    public string BusinessCode { get; set; } 

    public string Name { get; set; } 

    ... 
} 

如果我做一個獲取,更改主鍵,並嘗試保存回使用NHibernate的數據庫,我要麼收到異常或意外的結果(取決於如果我使用保存()更新(),或SaveOrUpdateCopy()

Business b = session.Get<Business>("BusinessCode1"); 

b.BusinessCode = "BusinessCode22"; 

session.Update(b); 

所以有這樣的可能嗎?

據我所知,許多NHibernate的人推薦使用不改變主鍵(即身份)。但我有一些使用自然鍵的數據庫。謝謝。

回答

1

我實際上在踢我自己,我甚至問過這個問題,因爲我可以通過執行刪除 - 插入類型的操作輕鬆緩解這一問題。這更像是一個現有數據庫的概念驗證。感謝您的輸入!

+0

太顯而易見了...... +1 :) – 2011-11-03 12:12:34

0

您是否嘗試過使用composite-id
Assigned Identifiers

添加自動遞增的ID字段是完全不是問題嗎?

+0

我們實際上正在使用composite-id。好好打電話!我實際上在踢我自己,我甚至問過這個問題,因爲我可以通過執行刪除 - 插入類型的操作輕鬆地減輕這個問題。這更像是一個現有數據庫的概念驗證。感謝您的輸入! – 2009-02-13 23:20:37