2008-11-03 34 views
3

說我正在映射一個簡單的對象到一個包含重複記錄的表,我想在我的代碼中允許重複。我不需要在此表上更新/插入/刪除,只顯示記錄。有沒有辦法在NHibernate中僞造一個ID列?

有沒有一種方法可以在我的映射文件中放入一個假(生成的)ID列來欺騙NHibernate認爲這些行是唯一的?創建組合鍵將不起作用,因爲所有列都可能有重複。

如果這不可行,解決此問題的最佳方法是什麼?

謝謝!

編輯:查詢似乎是去

回答

2

NHibernate的映射方式使得你會想保存更改的假設,因此對於某些類型的ID的要求。

如果您允許修改表,您可以添加標識列(SQL Server命名 - 您的數據庫可能不同)以自動生成唯一標識 - 現有代碼應該不受影響。

如果允許將數據添加到數據庫中,但不允許添加到表中,則可以嘗試定義包含RowNumber合成(計算)列的視圖,並將其用作要從中加載的數據源。根據您的數據庫供應商(以及處理視圖和索引的產品),此可能會在中遇到一些性能問題。

另一種替代方法,我沒有嘗試過,將映射您的類到SQL查詢而不是表。 IIRC,NHibernate支持在映射文件中命名SQL查詢,並且可以將它們用作「數據源」而不是表或視圖。

0

如果你的數據是隻讀一個我們發現簡單的辦法是包裝器的查詢在視圖中,並建立過視圖的實體,並添加newguid()列,結果是一樣的東西

SELECT NEWGUID()作爲ID,* FROM TABLE

ID然後成爲您唯一的主鍵。如上所述,這僅適用於只讀視圖。由於查詢後ID不具有相關性。

相關問題