【问题标题】:MVC 4, membership/profile and aspnet_resqlMVC 4、成员资格/配置文件和 aspnet_resql
【发布时间】: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


    【解决方案1】:

    【讨论】:

    • 谢谢。这篇文章正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多