C# 使用ASP.NET MVC和SqlMembershipProvider在哪里存储其他用户详细信息?

C# 使用ASP.NET MVC和SqlMembershipProvider在哪里存储其他用户详细信息?,c#,asp.net-mvc,membership,sqlmembershipprovider,asp.net-membership,C#,Asp.net Mvc,Membership,Sqlmembershipprovider,Asp.net Membership,所以,我正在创建一个ASP.NETMVC网站 它有一个相当复杂的用户注册页面,包含许多字段。我的问题是,我应该坚持到哪里?由成员资格提供程序工具创建的用户表不包含这些列,我对存储关于每个用户的附加信息的最佳实践感到困惑 这就是配置文件提供商发挥作用的地方吗?它们是如何工作的?如果没有,您如何保存和存储MembershipProvider表的stock列中未提供的其他用户详细信息 有人能给我指一些资源,介绍如何处理这个问题,在我需要时如何访问这些额外的用户详细信息,如何使用所有这些信息创建新用户等

所以,我正在创建一个ASP.NETMVC网站

它有一个相当复杂的用户注册页面,包含许多字段。我的问题是,我应该坚持到哪里?由成员资格提供程序工具创建的用户表不包含这些列,我对存储关于每个用户的附加信息的最佳实践感到困惑

这就是配置文件提供商发挥作用的地方吗?它们是如何工作的?如果没有,您如何保存和存储MembershipProvider表的stock列中未提供的其他用户详细信息


有人能给我指一些资源,介绍如何处理这个问题,在我需要时如何访问这些额外的用户详细信息,如何使用所有这些信息创建新用户等等。

这篇文章帮助我解决了这个问题。

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

<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>
HttpContext.Profile["Name"] = name;
HttpContext.Profile.GetProfileGroup("Address")["Zip"] = zip;

编辑:正如Andy所指出的,如果要对这些属性运行查询,使用默认的SqlProfileProvider并不是很好。他是完全正确的,也许我本来应该注意到这个限制。存在此限制是因为SqlProfileProvider存储的所有配置文件数据都在三列中:PropertyNames和PropertyValuesString/PropertyValuesBinary。所有键都存储在PropertyNames字段中,可以存储为字符串的值存储在PropertyValuesString字段中,等等。这意味着很难执行类似“从aspnet_Profile中选择*,其中年龄>10”这样的查询.

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

首先,您必须认识到成员资格和配置文件是两个独立的东西。ASP.NET成员资格、配置文件和角色功能设计为作为服务使用,服务于多个站点/应用程序

如果查看这些关系的模式,您会注意到用户对于系统是唯一的,但是用户可以在应用程序之间共享。这意味着它们的配置文件信息也可以在应用程序之间共享。成员资格实际上是用户与应用程序的关联,包含有关用户与特定应用程序关系的信息(密码、密码问答等)

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

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

另一个选项是,您可以将其视为一项服务,并自己跟踪此信息,使用asp.net sql提供程序中的用户id将其引用到您自己的概要文件实现中


Rolla的《4个家伙》有一个很好的系列(16个部分),我建议你阅读,然后,一旦你熟悉了所有的活动部分,就在哪里最好地存储以及如何最好地构建你想要创建的个人资料信息做出明智的决定。

我知道这篇文章已经发布了很长一段时间,问题的背景可能是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; }
}