0

我使用 MVC4 和它附带的默认成员/用户表。我在 Membership 表中添加了一个 PhoneNumber 列。

当我使用 Membership.GetUser() 获得 MembershipUser 时,它具有诸如电子邮件之类的属性。我想让 MembershipUsers 也有一个我添加的 PhoneNumber 列的属性。我该怎么做呢?

提前感谢您的所有帮助。

4

3 回答 3

3

您可能应该为此使用 Profile 提供程序。

如果您宁愿为此坚持使用 Membership,您正在考虑创建一个派生自 MembershipUser 的自定义类,以及一个自定义 Membership 提供程序来使用它。

于 2012-05-30T20:46:06.153 回答
0

为什么不调用membership.getuser() 使用的存储过程。

只有3个:

  • dbo.aspnet_Membership_GetUserByEmail
  • dbo.aspnet_Membership_GetUserByName
  • dbo.aspnet_Membership_GetUserByUserId

您实际上可以增强这些或创建更安全的克隆并直接从 MVC 调用它们。

这是最受欢迎的:

USE [MVCTemplate]
GO

/****** Object:  StoredProcedure [dbo].[aspnet_Membership_GetUserByUserId]    Script Date: 05/30/2012 22:12:08 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO

CREATE PROCEDURE [dbo].[aspnet_Membership_GetUserByUserId]
    @UserId               uniqueidentifier,
    @CurrentTimeUtc       datetime,
    @UpdateLastActivity   bit = 0
AS
BEGIN
    IF ( @UpdateLastActivity = 1 )
    BEGIN
        UPDATE   dbo.aspnet_Users
        SET      LastActivityDate = @CurrentTimeUtc
        FROM     dbo.aspnet_Users
        WHERE    @UserId = UserId

        IF ( @@ROWCOUNT = 0 ) -- User ID not found
            RETURN -1
    END

    SELECT  m.Email, m.PasswordQuestion, m.Comment, m.IsApproved,
            m.CreateDate, m.LastLoginDate, u.LastActivityDate,
            m.LastPasswordChangedDate, u.UserName, m.IsLockedOut,
            m.LastLockoutDate
    FROM    dbo.aspnet_Users u, dbo.aspnet_Membership m
    WHERE   @UserId = u.UserId AND u.UserId = m.UserId

    IF ( @@ROWCOUNT = 0 ) -- User ID not found
       RETURN -1

    RETURN 0
END
GO
于 2012-05-31T02:17:05.287 回答
0

您需要为此类情况实施自定义成员资格提供程序。这是一个很好的教程。 http://www.codeproject.com/Articles/165159/Custom-Membership-Providers

于 2012-05-31T01:45:45.937 回答