关于角色和成员资格表如何建立关系真的令人困惑

时间:2009-05-19 20:24:23

标签: c# asp.net sql asp.net-membership roles


我知道如何创建用户并将其分配给角色等,但当我试图深入挖掘角色和成员资格表如何建立彼此之间的关系时,我完全迷失了(BTW - 我做知道外键/主键如何工作;))

BTW - 我使用aspnet_sqlreg向导在数据库中创建了表


Q1 - SqlRolesProvider SqlMemebershipProvider 都有一个属性 ApplicationName 。我认为,为了使两个提供者能够在其用户和角色之间创建关联,他们都必须为 ApplicationName 属性使用相同的值。但事实似乎并非如此。

A)无论如何,我假设 SqlRolesProvider.ApplicationName 属性仅用于区分属于不同角色提供者的表条目,但它们不使用该属性以仅关联其角色成员资格提供者具有相同的 ApplicationName 值?!

B)但是,如果角色提供者只能与具有相同 ApplicationName 值的成员资格提供者相关联(因此SqlRolesProvider.ApplicationName == SqlMemebershipProvider.ApplicationName),那么这不是最实用的吗?



Q2 - 如果角色提供程序已连接到 DB1 ,而成员资格提供程序已连接到 DB2 ,我还是可以关联角色和用户。不知何故,我仍然可以将用户分配给不同的角色,即使角色是在不同的数据库中定义的。


A)但为什么呢?即,如果 SqlRolesProvider.ApplicationName =“rolesP” ApplicationID = 10 )和 SqlMembershipProvider.ApplicationName =“membership” ApplicationID = 100 ),然后为了使 DB1 中的表与 DB2 中的表有关系,两者必须通过 ApplicationName相互引用条目(实际上是通过ApplicationID),它将充当外键/主键。

但问题是, DB1的表中的外键字段都没有等于 SqlMembershipProvider.ApplicationID = 100 的值,这表明没有任何关系在 DB1 DB2 中的表之间建立(我知道情况并非如此,因为我能够将用户分配给角色)。那我错过了什么?


感谢名单


修改

呃,不知道是否还有人会读这篇文章,但是我做了更多的挖掘并且更加困惑:

如果两个角色( applicationName = R1 applicationID = 10 )和成员资格提供者( applicationName = M1 ) ApplicationID = 100 )在同一个数据库中,然后创建一个新用户导致 aspnet_Users 表两个为同一个用户名创建两个条目 - 一个用 ApplicationID = 10 和其他 ApplicationID = 100 。据我所知,创建新用户时,只应向aspnet_Users添加一个字段( ApplicationID = 100 )。嗯?!

2 个答案:

答案 0 :(得分:2)

你看过aspnet_UsersInRoles表吗?这是将用户链接到角色的表。 RoleProvider旨在与MembershipProvider分开,以便您可以将它们放在单独的DB中。此外,它允许您为一个应用程序名称设置角色,并在两个单独的应用程序中重用这些角色,每个应用程序都具有成员资格提供程序的不同应用程序名称。不要陷入两种提供者必须具有相同应用程序名称的心态,或者您的应用程序名称需要与正在运行的应用程序匹配。如果你不想,你根本不需要任何名字。我希望这会有所帮助。

答案 1 :(得分:1)

我很难跟着你说的话......

无论如何......你似乎太过关注数据库了。您是否为成员资格提供程序配置了web.config,是否可以使用C#和NOT SQL查询来查询“成员资格”?