8

所以,我正在创建一个 ASP.NET MVC 网站。

它有一个相当复杂的用户注册页面,其中包含很多字段。我的问题是,我应该在哪里坚持这个?会员提供者工具创建的用户表不包含这些列,我对存储每个用户的附加信息方面的最佳做法感到困惑?

这是档案提供者发挥作用的地方吗?它们是如何工作的?如果没有,您还如何坚持和存储未在 MembershipProvider 表的 stock 列中提供的其他用户详细信息?

任何人都可以向我指出一些有关如何处理的资源,如何在需要时访问这些其他用户详细信息,如何使用所有这些信息创建新用户等。

4

4 回答 4

3

我不确定是否有最佳实践,这实际上取决于您希望如何使用这些信息。

首先,您必须认识到会员资格和个人资料是两个不同的东西。ASP.NET 成员资格、配置文件和角色功能旨在用作服务,为多个站点/应用程序提供服务。

如果您查看这些关系的架构,您会注意到用户对于系统来说是唯一的,但用户可以跨应用程序共享。这意味着他们的个人资料信息也会在应用程序之间共享。成员资格实际上是用户与应用程序的关联,并包含有关他们与该特定应用程序的关系的信息(密码、密码问答等)。

您可以按照 Ryan 的建议使用配置文件提供程序,但是 1)如果您想要收集配置文件指标,则不容易查询该信息,并且 2)它在会员/配置文件服务的所有消费者之间共享。但是,您可以扩展它以满足您的需求。

您可以按照 Gortok 的建议扩展成员资格提供程序,并且该信息将与应用程序相关,但您需要确保不会通过以更改其接口的方式修改现有存储过程或表来破坏服务的现有消费者或意图。

另一种选择是您可以将其视为一项服务并自行跟踪此信息,使用来自 asp.net sql 提供程序的用户 ID 引用您自己的配置文件实现。

我建议阅读来自 Rolla 的 4 Guys 的关于会员资格、个人资料和角色的一个很好的系列(16 部分),然后,一旦你熟悉了所有的活动部分,就在哪里最好做出明智的决定存储以及如何最好地构建您要创建的配置文件信息。

于 2009-07-16T22:17:07.887 回答
3

这就是 ASP.NET 配置文件提供程序的用武之地。您可以使用它来存储您想要的有关用户的任何配置文件信息。您需要做的就是在 web.config 文件中添加您需要的字段,有关如何在 web.config 文件中配置配置文件字段的 MSDN 链接。总结这篇文章,您只需将要存储的名称和类型值添加到配置文件元素的属性节点。这是一个例子:

<profile enabled="true">
  <properties>
    <add name="Name" />
    <group name="Address">
      <add name="Street" />
      <add name="City" />
      <add name="Zip" type="System.Int32" />
    </group>
  </properties>
</profile>

在 ASP.NET Webforms 中,Visual Studio 自动创建一个强类型的配置文件类,它将引用您的自定义配置文件属性。在 MVC 中,这不会发生。要引用用户的个人资料信息,只需调用 HttpContext.Profile["PropertyName"]。一个例子:

HttpContext.Profile["Name"] = name;
HttpContext.Profile.GetProfileGroup("Address")["Zip"] = zip;

编辑:正如 Andy 所指出的,如果您想对这些属性运行查询,则使用默认的 SqlProfileProvider 并不是很好。他是完全正确的,也许我最初应该注意到这个限制。存在此限制是因为 SqlProfileProvider 将所有配置文件数据存储在三列中:PropertyNames 和 PropertyValuesString/PropertyValuesBinary。所有的键都存储在 PropertyNames 字段中,可以存储为字符串的值存储在 PropertyValuesString 字段中,等等。这意味着执行“Select * from aspnet_Profile where Age > 10”之类的查询非常困难。

于 2009-07-16T21:27:43.853 回答
2

我知道这个帖子已经发了很久了,问题的上下文大概是针对mvc2或更早的。

现在是 mvc3,我想也许其他寻求 mvc5 上下文答案的人可能会对这个解决方案感兴趣。

在启用了个人用户帐户的标准 mvc5 项目中,您将在 {Project}/Models/IdentityModel.cs 中找到可供使用的以下代码块

// You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
public class ApplicationUser : IdentityUser
{
}

只需向这个类添加更多属性,这些属性就会被持久化到数据库中。

public class ApplicationUser : IdentityUser
{
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public bool Active { get; set; }
        public DateTime DateRegistered { get; set; }
}
于 2015-04-17T20:00:57.850 回答
1

CODE 杂志的这篇文章帮助我解决了这个问题。

于 2009-07-16T20:03:20.857 回答