我正在试图弄清楚如何设置ASP.Net MVC 4的简单会员资格。在我当前数据库中容纳用户的表具有与'dbo'不同的模式。如何在初始化数据库连接时指定架构:
WebSecurity.InitializeDatabaseConnection
(
connectionStringName: "GuessAListConnection",
userTableName: "UserProfile",
userIdColumn: "UserId",
userNameColumn: "UserName",
autoCreateTables: false
);
架构没有选项。我尝试将架构附加到userTableName但产生错误。有什么建议吗?
由于
汤姆
答案 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生成成员资格表。可能有一种方法可以使用自定义成员资格表,但我还没想出来。