[-能够预]
在我的www.twipler.com项目中,我希望允许人们关联Twitter帐户。这将通过让他们登录,选择“链接帐户”然后再次登录来实现。这将有效地给我UserId-1和UserId-2。现在,我想允许用户使用UserId-1或UserId-2凭据登录,然后检索其他用户的凭据。 (随意发表评论,但这不是问题)
[设置]
C#3.5,NHibernate,TweetSharp,SQL 2005.
[问题]
如何在数据库中存储一个唯一整数的“包”,这样查询一个整数将返回其他相关的整数。
例如,我可能会创建一个名为UserLinks的表,并在插入新链接之前使用我计算的GroupId。它看起来像这样
UserLinks GroupId UserId 1 12312784 1 18329139 2 19319332 2 14529342 2 21031023
但是这感觉有点丑陋和非NHibernate。 (更新:注意可以有超过2个帐户)
下面提到使用Max(GroupId)+1找到一个新的GroupId,但我知道由于UserId是唯一的,我可以使用该组的第一个插入的UserId作为GroupId。
答案 0 :(得分:1)
实际上,这个表看起来是关于在一个表中链接(在同一级别上)1..n记录的正确方法。
答案 1 :(得分:1)
为什么这会是'un-nhibernate'? NHibernate是数据库的关系模型和业务类的OO模型之间的桥梁。
以最有效/正确的方式将数据存储在数据库中,就像使用关系数据库时一样。 创建您的业务类,以便您能够解决问题。使用NHibernate在这两个范例(关系数据模型和OO)之间建立桥梁。
所以: 以关系方式创建数据库模型。 创建您的域类: 您可以创建一个User类,其属性为“LinkedAccounts”。此属性可以是Account对象的列表。 在NHibernate映射中,您可以指定NHibernate从哪里(从哪些表中)获取其数据。
答案 2 :(得分:1)
似乎你只需要一个典型的自我多对多关系,你可以将其作为一个包含user_id_1和user_id_2作为复合PK的表来实现,两者都是用户表的userID的FK。