C# 在SQL中存储集合

C# 在SQL中存储集合,c#,nhibernate,collections,C#,Nhibernate,Collections,[pre-able] 在我的项目中,我希望允许人们链接Twitter帐户。这将通过让他们登录,选择“链接帐户”,然后再次登录来实现。这将有效地为我提供UserId-1和UserId-2。现在,我想允许用户使用UserId-1或UserId-2凭据登录,然后为其他用户检索凭据。(请随意评论,但这不是问题) [设置] C#3.5,NHibernate,TweetSharp,SQL 2005 [问题] 如何在数据库中存储唯一整数的“包”,以便查询一个整数将返回其他关联整数 例如,我可能创建一个名为Us

[pre-able]
在我的项目中,我希望允许人们链接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 UserLinks组标识UserId 1 12312784 1 18329139 2 19319332 2 14529342 2 21031023 但这感觉有点难看和不舒服。(更新:注意,可以有2个以上的帐户)


下面提到了使用Max(GroupId)+1查找新的GroupId,但我意识到,由于用户id是唯一的,我可以使用组的第一个插入的用户id作为GroupId。

实际上,该表看起来是正确的链接方式(在同一级别上)1..n条记录一起放在一个表中。

实际上,该表似乎是将(同一级别)1..n条记录一起链接在一个表中的正确方法。

为什么这会是“unnhibernate”? NHibernate是DB的关系模型和业务类的OO模型之间的桥梁

以最有效/正确的方式将数据存储在数据库中,就像使用关系数据库时通常所做的那样。 创建业务类,以便能够解决问题。使用NHibernate在这两种范式(关系数据模型和OO)之间架起桥梁

因此: 以关系方式创建DB模型。 创建域类: 您可以创建一个具有属性“LinkedAccounts”的用户类。此属性可以是帐户对象的列表。
在NHibernate映射中,您可以指定NHibernate从何处(从哪些表)获取数据。

为什么这是“un NHibernate”? NHibernate是DB的关系模型和业务类的OO模型之间的桥梁

以最有效/正确的方式将数据存储在数据库中,就像使用关系数据库时通常所做的那样。 创建业务类,以便能够解决问题。使用NHibernate在这两种范式(关系数据模型和OO)之间架起桥梁

因此: 以关系方式创建DB模型。 创建域类: 您可以创建一个具有属性“LinkedAccounts”的用户类。此属性可以是帐户对象的列表。
在您的NHibernate映射中,您可以指定NHibernate从何处(哪些表)获取数据。

似乎您只需要一个典型的自多对多关系,您可以将其实现为一个包含用户id_1和用户id_2的表,作为一个复合PK,这两个都是FK到用户表的userID。

似乎您只需要一个典型的自我多对多关系,您可以将其实现为一个表,其中包含用户id_1和用户id_2作为复合PK,这两个都是FK到用户表的userID。

我希望向我的用户类/实体添加一个属性“LinkedAccounts”是一个主键数组。自己动手似乎是NHibernate可能为您做的工作。我希望在我的用户类/实体中添加一个属性“LinkedAccounts”,这是一个主键数组。自己动手似乎是NHibernate可能为您做的工作。这是我可能最终要做的,但找到max(GroupId)+1看起来像“工作”你说的“找到max(groupid)”是什么意思“?为什么不让DB确定新的groupid?否则,您可以通过查看当前用户已经存在的groupid来计算新的groupid?我看不出使用组与简单的多对多关系相比有什么好处。这是我可能最终要做的,但找到max(groupid)+1似乎是“工作”“你说的‘查找max(groupid)’是什么意思?”?为什么不让DB来确定新的groupid呢?否则,您可以通过查看当前用户已经存在的GroupId来计算新的GroupId?我看不出使用组与简单的多对多关系相比有什么好处。问题是,用户id 3去了哪里?它与2或1绑定?OP说没有父用户帐户。此外,使用此方法提取与特定登录名关联的所有用户帐户的sql将有点混乱。@Chris,一点也不,这是100%标准的多对多,用户id_3不存在,我们将有1,2和1,3。这一点都不难查询,很简单。为了从3到2,你必须通过1。然后问题是用户id 3去哪里?它与2或1绑定?OP说没有父用户帐户。此外,使用此方法提取与特定登录名关联的所有用户帐户的sql将有点混乱。@Chris,一点也不,这是100%标准的多对多,用户id_3不存在,我们将有1,2和1,3。这一点都不难查询,很简单。为了从3到2,你必须通过1。