2

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

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

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

谢谢

汤姆

4

2 回答 2

1

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

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

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

UserId、用户名、PersonId、名字、姓氏、AuthenticationType、LastLoginDate、IsLockedOut

在我的应用程序中,我可以通过多种不同的方式对一个人进行身份验证:Form、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 用户名、电子邮件地址(如果我使用表单身份验证)或 Facebook 或 Twitter 返回的任何内容)返回的值。因此,我的 Security.Authentication 表中的 UserName 没有一致性。

初始化数据库连接仍然需要一个表,以便 SimpleMembership 生成成员表。也许有一种方法可以拥有一个自定义会员表,但我还没有想出来。

于 2013-03-27T16:43:13.653 回答
1

WebSecurity 将使用数据库用户的任何默认模式。无法指定我知道的不同模式。

于 2013-03-27T06:50:37.160 回答