好吧我在一個情況我有以下各表NHibernate的設計和組合鍵
用戶(用戶ID ....) UserFavourite(用戶ID,OtherUserId,ADDDATE)
如果你的「最愛「另一個用戶向userFavourite添加一行。現在,我在UserId和OtherUserId列和具有兩個外鍵約束的User表之間具有參照完整性。
我的問題是,通過NHibernate訪問它的最佳做法是什麼?基本的Get <>方法需要一個id,它是ID列。在這種情況下,表的唯一標識特性是UserId和OtherUserId的組合鍵,所以這導致我認爲我應該有一個組合鍵。我到處看到他們不好,如果數據庫設計正確,我不應該使用它們。
所以我想我還能怎麼設計數據庫,我想我可以有
UserFavourite(的UniqueID,用戶ID,OtherUserId,ADDDATE)
並作出唯一ID的PK和ID的獲取方法,並在UserId/OtherUserId列上放置一個唯一約束。然而,這並不能解決我的問題,因爲當我想通過代碼刪除該行或獲取它時,我仍然需要傳遞我無法訪問的UniqueID。我希望能夠說
「從您的收藏夾中刪除此用戶(用戶ID 142)」。所以我只能訪問UserId和你自己的UserId,所以我需要使用這兩個ID來運行NHibernate查詢,而不是唯一的ID。
有人可以指示我如何通過理想的做法在NHibernate中處理這種情況的方向,以便我可以輕鬆高效地執行這些查詢而不使用組合鍵嗎?
我對用戶類上的兩個一對多映射有點困惑,你可以發佈一個示例映射嗎?我不知道你們是如何聲明UserId屬性,並在該文件中有相同的屬性兩個單獨的映射。另外當你說我可能永遠不會使用UniqueId進行刪除時,我該如何刪除?我認爲使用會話對象刪除的唯一方法是使用ID? – NZJames 2012-03-16 09:57:59