我使用 aspnet_regsql.exe 将一系列用于角色、用户和成员资格管理的 ASPNET 数据库表添加到我现有的 SQL 数据库中。
现有数据库中已经有一个用户表,其中包含许多用户的信息(ID、姓名、地址、邮政编码等)。我想要实现将新aspnet_Users表与现有用户表相关联的目标。
请问是否有任何推荐选项?谢谢
干杯亚历克斯
用户密钥(在 ASPnet 成员资格表中称为 UserId)是标识用户的 GUID。 您可以将UserKey
列添加到Users
表中,然后开始执行危险操作,例如:
select *
from Users as U inner join
aspnet_Users as aU on aU.UserId = U.UserKey inner join
aspnet_Membership as aM on aM.UserId = aU.UserId
where U.UserId = @UserId
Microsoft(或我)不提供任何明示或暗示的保证,如果您想直接在他们的表格中摆弄。
参与的一个项目中也有类似的情况。 我们最终所做的是将外部用户表中相关用户记录的主键存储为 ASPNET 成员资格模型的配置文件属性。
好处是,我们不必更改有关外部数据库架构的任何内容来创建关系,并且可以使用内置的 ASPNET 成员资格配置文件对象轻松地从 Web 代码隐藏中获取相关密钥。
此配置文件属性的初始填充是通过我们专门为使用 ASPNET 成员资格配置文件对象为任务编写的实用程序完成的,并且由于我们的成员资格设置和外部表都存储了用户的电子邮件地址,使其成为一次性任务的密钥,因此
更容易填充。这种方法的缺点是 ASPNET 成员配置文件表在很大程度上没有非规范化(或就此而言真正规范化)。 它将配置文件属性存储为 xml 数据或序列化二进制文件。 在旧版本中,它被序列化为存储为包含所有值的单个值字符串的名称和字符位置。 这使得从外部表方面编写查询、联接等变得困难(如果不是不切实际的话)。
对我们来说,这没什么大不了的,因为我们只是根据网站的具体情况处理外部用户数据。 因此,使用构建的对象从 ASPNET 配置文件中获取密钥,然后在外部数据库中查找密钥很容易。
如果您的项目要执行大量关系查询或批处理,那么我可能会建议将 ASPNET UserId GUID 作为外键存储在外部用户表中,或者电子邮件是否使用这些是唯一的。