在SQL中存储集合

时间:2010-01-28 22:04:09

标签: c# nhibernate collections

[-能够预]
在我的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。

3 个答案:

答案 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。