WebSecurity.InitializeDatabaseConnection失败,并显示“尚未启用角色管理器功能”。从控制台程序调用时

时间:2013-11-04 11:16:55

标签: asp.net-mvc-4 simplemembership

我有一个使用SimpleMembership对用户进行身份验证的MVC4应用程序。

我想从控制台程序中添加用户。

控制台程序,它引用具有将创建用户的方法的类库。

看起来像这样:

public class UserBuilder
{
    private static readonly SimpleMembershipInitializer _membershipInitializer;
    private static readonly bool _isInitialized;
    private static readonly object _initializerLock = new object();

    static UserBuilder()
    {
        LazyInitializer.EnsureInitialized(ref _membershipInitializer, ref _isInitialized, ref _initializerLock);
    }

    public void HandleEvent(UserAdded @event)
    {
        if (!WebSecurity.UserExists("ReportModels"))
        {
            WebSecurity.CreateUserAndAccount("ReportModels", "ReportModels");
        };
    }

    private class SimpleMembershipInitializer
    {
        public SimpleMembershipInitializer()
        {
            WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
        }
    }
}

当我启动控制台应用程序时,我会在System.Configuration.Provider.ProviderException {"The Role Manager feature has not been enabled."}开头的行中获得WebSecurity.InitializeDatabaseConnection

我需要做些什么来完成这项工作?

我试过了:

  • 将nuget包Microsoft ASP.NET Web Pages 2 Web Data添加到控制台项目和类库项目中。
  • 此帖中列出的答案:SimpleMembershipProvider not working
  • 验证了连接字符串。
  • 验证了表格在数据库中的位置。
  • 验证了从MVC4项目创建用户并对其进行身份验证是有效的。

1 个答案:

答案 0 :(得分:3)

最后通过这篇博文中的信息解决了这个问题:http://insomniacgeek.com/to-call-this-method-the-membership-provider-property-must-be-an-instance-of-extendedmembershipprovider/以及一些谷歌搜索。

本质上我需要将它添加到我的app.config文件中:

<system.web>
<profile defaultProvider="SimpleProfileProvider">
  <providers>
    <add name="SimpleProfileProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"
        connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</profile>
<membership defaultProvider="SimpleMembershipProvider">
  <providers>
    <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
  </providers>
</membership>
<roleManager defaultProvider="SimpleRoleProvider" enabled="true">
  <providers>
    <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
  </providers>
</roleManager>
</system.web>

请注意enabled="true"元素上的roleManager。没有它,将抛出相同的异常。

相关问题