如果我的默认成员资格提供程序设置为使用与实际SQL Server的连接,那么Roles.CreateRole("admin")
在App_Data
内创建新本地数据库的原因是什么?
我有一个像这样的连接字符串:
<connectionStrings>
<add name="MembershipDbConnection"
connectionString="Server=.;Initial Catalog=aspnetdb;User Id=*;Password=*" />
</connectionStrings>
和会员提供商定义如下:
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add
name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="MembershipDbConnection" <-- this is the connection
/>
</providers>
</membership>
奇怪的是,我的SQL Server中有一个aspnetdb
数据库(填充了表格),如果我使用Membership.GetAllUsers()
,我会毫无问题地获得该表中的用户。登录也按预期工作。但Roles.CreateRole
创建了一个新数据库。
答案 0 :(得分:4)
如果要使用角色,则需要配置“角色管理器”部分。您可能正在使用使用不同连接字符串的继承的RoleManager部分。
答案 1 :(得分:1)
我认为您没有在Web.Config中的“membership”和“roleManager”标签中提供“applicationName”属性。这是一个例子: -
<membership>
<providers>
<clear />
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="MembershipDbConnection" applicationName="/" />
</providers>
</membership>
<roleManager enabled="true">
<providers>
<clear />
<add connectionStringName="MembershipDbConnection" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" />
<add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" />
</providers>
</roleManager>
答案 2 :(得分:0)
Mansoor Gee的回答提供了一个很好的模板。 这里有一个文档链接,说明应该在web.config中实现什么以及如何实现,以启用RoleManager:
http://msdn.microsoft.com/en-us/library/vstudio/ms164660(v=vs.100).aspx
希望这会给未来的读者增加一些背景,因为当我第一次看到这个答案时我需要一些。