ASP.NET Membership和Roles分离关系

时间:2010-06-09 18:42:16

标签: asp.net asp.net-membership entity-relationship

我有一个ASP.NET项目,我希望将成员资格(SQL Provider)保存在一个单独的数据库中,角色/配置文件将按应用程序进行。

问题

成员资格数据库与角色/个人资料数据库之间的关系是什么?是UserID还是UserName?

我在单独的expolrer中打开了表,并注意到MemberID数据库中的UserID与应用程序Roles数据库中的UserID不同。

2 个答案:

答案 0 :(得分:2)

如果我正确地阅读了您的问题,您希望将成员资格存储在一个数据库实例中,将角色存储在另一个数据库实例中。

通过简单地提供不同的连接字符串,这是可以接受的。您没有需要实施自定义提供程序。

了解角色和成员资格是真正独立的问题,除了由MembershipProvider.DeleteUser方法造成的轻微出血,并且可以单独操作。

角色和成员资格表之间没有真正的“关系”,而aspnet_users表中记录的外观所推断的任何内容都是巧合的。如果在为用户进行角色查询时存在记录,则使用该userId,否则将创建具有新userId的新记录。

整个提供程序堆栈中使用的公共值是username字段,虽然应用程序是唯一的,但它不是密钥。

因此,只要您知道在调用Membership.DeleteUser时必须手动执行角色记录的删除,您可能只需使用两个数据库,无需自定义实现。

祝你好运

答案 1 :(得分:-2)

在这种情况下,您可以做的最好的事情是实现您自己的(自定义)MemberShip和角色提供程序。成员资格和角色之间的关系由您自己定义,用户名通常用于此。

评论诗人的回应:

也许我不应该提到“最佳解决方案”,但在我看来,默认的AspNet成员资格和角色提供程序伴随着使用aspnet -regsql命令创建的Aspnet表。如果Microsoft的成员资格和角色提供程序没有满足您的需求,您应该创建自己的。 如果您创建自己的成员资格和角色提供者,则其他开发人员将清楚他们正在处理以不同方式工作或构建的提供者实现。

我的结论是,我的解决方案可能不是“最佳解决方案”,而是更多建议。另一方面,ASP.NET Providers并不是一个好的软件设计的例子。我们仍在使用它,因为它们与其他控件兼容。你的解决方案没问题,但是我的解决方案也可以做到,这取决于先生。赛义夫选择最适合其应用的解决方案。

微软提到:

创建自定义成员资格提供程序有两个主要原因。

•您需要将成员资格信息存储在.NET Framework附带的成员资格提供程序不支持的数据源中,例如FoxPro数据库,Oracle数据库或其他数据源。

•您需要使用

管理会员信息
  

与...不同的数据库架构   。使用的数据库模式   随.NET一起提供的提供程序   框架