2010-01-06 53 views
2

我(希望)剛剛開始我的第一個NHibernate項目,並遇到了一個絆腳石。希望得到任何建議。在沒有主鍵的表上使用NHibernate

我正在開發一個項目,在這個項目中,我的新代碼將與遺留代碼並排運行,我根本無法更改數據模型。我遇到過一種主表中沒有主鍵的情況。它是這樣的:

假設有一個順序表和產品表,其中列出了產品中的每個順序的LINE_ITEM表(即ORDER_ID,PRODUCT_ID和數量的consits)。在這個數據模型中,相同訂單中的相同產品可能有兩個訂單項。現有代碼中會發生什麼情況:只要用戶更新訂單項,該訂單的所有訂單項都會被刪除並重新插入。由於即使是line_item表中所有字段的複合鍵也不一定是唯一的,因此這是在此數據模型中更新行項目的唯一可能方式。

我準備保證我永遠不會嘗試更新或刪除個人訂單項。我能否像現有代碼一樣使NHibernate代碼工作?如果沒有,這是否意味着我(一)我根本不能使用NHibernate; (b)我不能使用NHibernate來映射line_item表;或(c)我仍然可以映射此表,但您的任何意見

+0

就我個人而言,我認爲你會努力與NH合作。 – UpTheCreek 2010-01-07 10:21:15

+0

添加自動遞增的ID列是否會打破傳統應用程序? (如果沒有PK列並且執行'DELETE' /'INSERT'而不是'UPDATE',那麼我認爲它有可能做'SELECT *'的可能性大於零。 ) – 2010-01-07 15:11:01

+0

從我可以告訴,現有的應用程序確實做'選擇*',但它似乎通過名稱而不是索引訪問字段。不過,我真的寧願沒有冒險搞數據模型,以防萬一 – 2010-01-08 11:16:13

回答

0

我覺得不是它關係

感謝如果你映射它作爲訂單一包集合(具有反=「假」),它會工作。

Collection Mapping

注:大的NHibernate袋映射 與逆= 「假」 是低效 ,應當避免; NHibernate 無法分別創建,刪除或更新行 ,因爲沒有可用於標識單個行的密鑰 。

他們警告,但它聽起來像你想要的。

+0

謝謝我一定會嘗試這一點。我非常希望在這個項目上使用NHibernate,但是如果它不能處理這種關係,它可能對我來說是一個炫耀者。 – 2010-01-08 11:17:57