1

我使用 aspnet_regsql.exe 将一系列用于角色、用户和成员管理的 ASPNET 数据库表添加到我现有的 SQL 数据库中。

现有数据库中已经有一个用户表,其中包含许多用户的信息(ID、姓名、地址、邮政编码等)。我想要实现将新的 aspnet_Users 表与现有的用户表相关联。

请问有什么推荐的选项吗?谢谢

干杯,亚历克斯

4

2 回答 2

1

我们在几年前参与的一个项目中遇到了类似的情况。我们最终所做的是将外部用户表中相关用户记录的主键存储为ASPNET成员资格模型的配置文件属性

好处是我们不必更改任何有关外部数据库架构的任何内容来创建关系,并且我们可以使用内置的 ASPNET 成员身份配置文件对象轻松地从 Web 代码隐藏中获取相关密钥。

此配置文件属性的初始填充是通过我们使用 ASPNET 成员身份配置文件对象专门为任务编写的实用程序完成的,并且由于我们的成员资格设置和外部表都存储了用户的电子邮件地址,使其成为关键一次性任务。

这种方法的缺点是 ASPNET Membership Profile 表在很大程度上没有进行非规范化(或就此而言实际上是规范化的)。它将配置文件属性存储为 xml 数据或序列化二进制文件。在旧版本中,它使用存储为包含所有值的单个值字符串的名称和字符位置的属性名称进行序列化。这使得从外部表方面编写查询、连接等变得困难(如果不是不切实际的话)。

对我们来说,这没什么大不了的,因为我们只是根据网站的具体情况处理外部用户数据。因此,使用构建对象从 ASPNET 配置文件中获取密钥,然后在外部数据库中查找它很容易。

如果您的项目要执行大量关系查询或批处理,那么我可能会建议将 ASPNET UserId GUID 作为外键存储在您的外部用户表中,或者如果电子邮件将使用它们是唯一的。

于 2012-06-01T00:13:52.417 回答
1

在 ASPnet 成员表中称为 UserId的UserKey是标识用户的 GUID。您可以在表格中添加一UserKeyUsers,然后开始执行危险的操作,例如:

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(或我)不提供任何明示或暗示的保证。

于 2012-06-01T02:11:44.493 回答