我不确定在MVC中是否应该以不同的方式进行操作,但我很好奇在使用Membership提供程序时向ASP.NET用户帐户添加额外信息的推荐方法是什么?还有如何将此用户与其他实体关联。
通常我不会理会配置文件,而是更喜欢向简单地引用USERID的表中添加额外信息。这对于ASP.NET MVC方法来说好/坏/可接受,还是有其他替代方案?
我不确定在MVC中是否应该以不同的方式进行操作,但我很好奇在使用Membership提供程序时向ASP.NET用户帐户添加额外信息的推荐方法是什么?还有如何将此用户与其他实体关联。
通常我不会理会配置文件,而是更喜欢向简单地引用USERID的表中添加额外信息。这对于ASP.NET MVC方法来说好/坏/可接受,还是有其他替代方案?
这是一个好问题,我也曾经苦恼过。我认为有三种基本方法:
使用个人资料提供程序 - 这使添加属性变得容易,但如果需要应用过滤器/搜索,生成用户表格等操作则变得繁琐。API 无法胜任。
添加一个新的表(或扩展现有表格),然后加入它。然后您将需要编写自己的方法来获取自定义数据。
编写自己的成员身份提供程序,继承 MembershipProvider 类。
对于我的最后一个项目,我使用了最后一种方法 - 我编写了一个非常快速的 SQL 提供程序,仅实现了创建用户、身份验证和更改密码所需的基本要素。对于其余的虚拟方法,我只抛出了一个 NotImplementedException
。
然后,我添加了一个新的类来添加我所需的额外属性,并使其可以通过传递标准的 MembershipUser
来实例化。像这样:
public static CustomMember GetMember(MembershipUser user)
{
// Get your custom member
}
这样你就可以在大多数情况下使用标准的MembershipUser,但是如果需要获取当前用户的更多详细信息,可以采用以下方式:
MembershipUser user = Membership.GetUser();
CustomMember member = CustomMember.GetMember(user);
不过我很感兴趣看看其他人的方法是什么。
使用MVC不应对处理会员和“用户数据”的方式产生任何重大影响。
我通常也避免使用ASP.NET Profiles,以及默认的ASP.NET Membership,而是更喜欢自己编写会员提供程序和与现有用户表相关联的“配置文件”架构。
如果您对客户会员提供程序的进一步信息感兴趣,请发表评论。
我很想看到更多有关这个主题的反馈和人们的做法。目前,我在一个asp.net mvc应用程序中使用标准的asp.net成员身份验证/角色提供程序系统,但并不喜欢它。
我的方法是修改aspnet_users表格,并添加一堆额外的列;CompanyId、StreetAddress等。
我将用户在网站上的使用设置存储在标准配置文件中;他们使用什么主题、分页列表显示多少条记录以及其他一些东西。
正如大多数人所发现的那样,从配置文件中获取信息和导出信息都很麻烦,而且据我所读,在大型系统中,由于序列化,这可能会成为性能瓶颈。
我倾向于滚动我的表格,以更好地匹配我的应用程序架构,实现自定义SQL提供程序,然后查看是否需要编写一些额外的asp.net mvc安全属性。