【发布时间】:2012-09-05 16:58:37
【问题描述】:
我正在开发一个 MVC 4 应用程序。我正在研究会员身份验证和个人资料模块,我有点困惑。
我很困惑,因为似乎有两组授权/配置文件模块在幕后工作:
短版
授权有两组表:一组是在您创建新的 MVC 4 Internet 应用程序时创建的 第二个是在您运行 aspnet_regsql 时创建的。 数据以一种令人困惑的方式从两组中保存和提取。
这两个集合是如何相关的: 什么保存在哪里? 为什么要在两组中创建用户? 等等
加长版
设置 1
我创建了一个新的 MVC 4 Internet 项目。它具有注册用户和创建角色的能力。自动生成的数据库包含以下表格:Users、Roles、UserInRoles、Memebership、Profiles。 没有存储过程。 授权工作正常:用户数据和角色已正确保存在用户、角色和 UserInRoles 表中。
设置 2
然后我继续为站点用户添加配置文件。我关注了Joel's answer。运行代码时点击这一行: AccountProfile.CurrentUser.FullName = "史努比"; 我收到了这个错误:
找不到存储过程“dbo.aspnet_CheckSchemaVersion”。
我针对之前创建的数据库运行了 aspnet_regsql,并创建了预期的一组 aspnet_ 表和存储过程。 再次测试了我的代码。 这次它工作正常,并且配置文件属性已正常保存到 aspnet_Profile 表(这是意料之中的)。
在下一步中,我创建了一个新用户。该用户是在两个用户表和 aspnet_Users 表中创建的(具有不同的 UserId 值)——请参阅此处picture 1
将属性 FullName=Snoopy 添加到他的个人资料中。
Running Membership.GetUser().ProviderUserKey 从表 Users 中返回 UserId。 运行 AccountProfile.CurrentUser.FullName 返回“史努比”。 请看这里picture 2。
这非常令人惊讶,因为这意味着系统以某种方式知道如何将表 Users 中的记录与表 aspnet_Profile 中的记录相关联,其中 UserId 字段来自表 aspnet_users。 顺便说一句,我验证了表 Profiles 是空的,因此没有从那里获取值。
那么这里发生了什么? 这种行为是预期的行为吗? 或者说 Jole 的回答是错误的,因为在 MVC 4 应用程序中实现 Profile 有其他(更好的?)方法,而我所做的就是投入工作?
【问题讨论】:
标签: asp.net-mvc