好吧我在一个情况我有以下各表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