Roles.CreateRole()在App_Data中创建一个新数据库

时间:2011-10-26 09:28:02

标签: asp.net asp.net-membership roles membership-provider

如果我的默认成员资格提供程序设置为使用与实际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创建了一个新数据库。

3 个答案:

答案 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

希望这会给未来的读者增加一些背景,因为当我第一次看到这个答案时我需要一些。