2012-07-10 81 views
1

我正在使用傳統Oracle數據庫開發的應用程序中使用流利NHibernate(我很新)。數據庫具有由外鍵和數據庫生成的列組成的組合鍵。生成的列是通過調用具有表名稱的DB函數以及其他外鍵部分之一來提供的。生成的複合關鍵部分不是唯一的,我不能改變它。生成的關鍵部分通常也用作其他表的外鍵。Fluent Nhibernate使用複合鍵映射遺留數據庫

如果我創建指定組合鍵,因爲它是在數據庫實體映射,那麼我們就不能使用任何身份生成策略,打破工作

如果我創建指定只生成列實體映射單元作爲主鍵,然後我可以使用觸發器身份來生成ID,並獲得工作單元,但是當我想要更新或訪問子集合時,我遇到問題:密鑰的其他部分不是包含在WHERE語句中。

任何人都可以給我任何建議如何進行?

  • 如果我堅持映射組合鍵,我可以擴展nhibernate來輸出SQL來使用觸發標識嗎?如果是這樣,你能建議一個起點嗎?
  • 如果我映射單個列鍵,是否可以在WHERE子句中包含HasMany映射和更新的其他屬性?
+0

你可以嘗試' ... – Firo 2012-07-10 11:56:14

+0

@Firo,我不認爲這是可能的流利NHibernate。如果使用XML映射,是否會輸出SQL語句以返回生成的ID,並將它用於外鍵,您是否需要htink? – TimC 2012-07-11 04:22:00

+0

AFAIK FNH has .Generated(),必須檢查 – Firo 2012-07-11 06:54:29

回答

1

不幸的是,正如你已經發現的那樣,這個設置完全沒有支持。

我的建議是手動進行INSERTS(例如使用自定義SQL)。是的,這打破了UoW,但identity也是如此。

+0

hi @Diego,你認爲有可能以某種方式擴展nhibernate,這樣我可以輸出SQL來調用ID生成函數來設置插入或更新查詢中的ID和外鍵參數嗎?如果是這樣,你能否給我一個啓動的想法,或者指出我有關於此的任何文檔? – TimC 2012-07-11 04:20:20

+0

也許是。我不知道該怎麼做。 – 2012-07-11 12:02:27

相關問題