ASP.Net MVC 4简单成员资格指定模式

时间:2013-03-27 06:06:59

标签: authentication asp.net-mvc-4 simplemembership

我正在试图弄清楚如何设置ASP.Net MVC 4的简单会员资格。在我当前数据库中容纳用户的表具有与'dbo'不同的模式。如何在初始化数据库连接时指定架构:

            WebSecurity.InitializeDatabaseConnection
            (
                connectionStringName: "GuessAListConnection",
                userTableName: "UserProfile",
                userIdColumn: "UserId",
                userNameColumn: "UserName",
                autoCreateTables: false
            );

架构没有选项。我尝试将架构附加到userTableName但产生错误。有什么建议吗?

由于

汤姆

2 个答案:

答案 0 :(得分:1)

WebSecurity将使用数据库用户的默认架构。无法指定我所知道的不同架构。

答案 1 :(得分:1)

如果您的用户/身份验证表与dbo(或任何数据库用户的默认架构)不同,那么我找到了另一种解决方案,那就是使用视图。

在我的数据库中,我的用户/身份验证表的范围限定为“安全”架构。我还有Person表所在的Person模式。我只在Person表中存储了FirstName,LastName。

我创建了一个视图,将所有表格拉到一起进行身份验证,并返回以下字段:

UserId,UserName,PersonId,FirstName,LastName,AuthenticationType,LastLoginDate,IsLockedOut

在我的应用程序中,我可以通过多种不同的方式对一个人进行身份验证:表单,Windows,Facebook,Twitter等.UserId,UserName与不同的身份验证类型相关。

这是我在ASP.Net MVC中的UserProfile类:

  [Table("__vwRegisteredUser")]
  public class UserProfile
  {
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public String UserName { get; set; }
    public int PersonId { get; set; }
    public String FirstName { get; set; }
    public String LastName { get; set; }
    public String AuthenticationTypeName { get; set; }
    public Boolean IsLockedOut { get; set; }
    public DateTime LastLoginDate { get; set; }

    public int Id
    {
        get
        {
            return PersonId;
        }
    }

    public String Name
    {
        get
        {
            return String.Format("{0} {1}", FirstName, LastName);
        }
    }
}

注意我使用Table属性的视图。我还将PersonId作为Id属性返回,并将FirstName和LastName连接在一起作为Name属性。 UserName是从我的身份验证类型返回的值(Windows用户名,电子邮件地址,如果我正在使用Forms身份验证,或Facebook或Twitter返回的任何内容)。因此,我的Security.Authentication表中的UserName没有一致性。

初始化数据库连接仍需要一个表,以便SimpleMembership生成成员资格表。可能有一种方法可以使用自定义成员资格表,但我还没想出来。