“尚未启用”角色管理器“功能”,configuration.cs位于单独的项目中

时间:2013-06-27 15:51:16

标签: asp.net-mvc-4 roleprovider

我有一个MVC4应用程序,模型和迁移在一个单独的项目中,这是一个类库。

我正在尝试使用种子方法

中的以下代码为旧用户播种数据库
foreach (var subcontractor in context.Subcontractors)
{
    WebSecurity.CreateUserAndAccount(subcontractor.Email, subcontractor.ObsoletePlainTextPassword);
}

我将以下代码从我的主项目复制到app.config中,但我认为它没有被提升。

<profile defaultProvider="DefaultProfileProvider">
  <providers>
    <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</profile>
<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>
<roleManager defaultProvider="DefaultRoleProvider">
  <providers>
    <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</roleManager>

我运行update-database时出现The Role Manager feature has not been enabled.错误。 我错过了什么?

2 个答案:

答案 0 :(得分:3)

问题在于我的“数据”项目不是StartUp项目。 App.config未被读取,这导致错误。

答案 1 :(得分:1)

MVC4从WebMatrix重建(或者说更多借用)认证系统,因此请确保您没有混合来自先前auth系统的任何代码。但是如果你在那里使用默认的安全性和身份验证(现在是SimpleMembership)并且你正在尝试种子角色,则需要在web.config中启用SimpleRoleProvider。您是否尝试在实体迁移的种子方法中为具有相应角色的用户或用户设定种子?如果您没有使用角色为数据库播种,那么它可能是其他内容。通过在迁移/ congiguration.cs文件中删除对播种角色的任何提及来测试此操作。因此,请确保提及SimpleRoleProvider不在configuration.cs文件中,或者在web.config中尝试以下代码。

<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
  <providers>
    <clear/>
    <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
  </providers>
</roleManager>
<membership defaultProvider="SimpleMembershipProvider">
  <providers>
    <clear/>
    <add name="SimpleMembershipProvider" 
         type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"/>
  </providers>
</membership>

原因是当网站运行时,SimpleRoleProviders作为MVC的一部分提供,此角色提供程序必须显式配置为迁移的种子方法的一部分。否则,迁移中的种子方法将无法获取它。