1

我有一个 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>

在我运行更新数据库的地方,我得到了The Role Manager feature has not been enabled.错误。我错过了什么?

4

2 回答 2

3

问题是我的“数据”项目不是启动项目。App.config 没有被读取,这导致了错误。

于 2013-07-23T16:37:48.573 回答
1

MVC4 从 WebMatrix 重建(或者你可以说更多是借用)身份验证系统,因此请确保您没有混合来自先前身份验证系统的任何代码。但是,如果您在其中使用默认的安全和身份验证(现在是 SimpleMembership)并且您正在尝试播种角色,则需要在 web.config 中启用 SimpleRoleProvider。您是否尝试在实体迁移的种子方法中为一个或多个具有相应角色的用户播种?如果您没有为数据库播种角色,那么它可能是别的东西。通过删除任何提及的迁移/配置.cs 文件中的种子角色来测试这一点。因此,请确保在 configuration.cs 文件中没有提及 SimpleRoleProvider,或者在 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 的一部分可用时,必须将此角色提供程序显式配置为迁移的种子方法的一部分。否则迁移中的种子方法将无法获取它。

于 2013-07-23T01:07:51.163 回答