SimpleMembershipProvider不工作

时间:2012-09-03 22:33:39

标签: asp.net asp.net-mvc entity-framework asp.net-mvc-4 simplemembership

我与VS2012开始了一个新的互联网项目,我试图重新调整我的项目,我似乎无法保持SimpleMemberhsipProvider的工作。基本上,我所做的就是将模型对象与其他几个项目一起移动到核心项目中。我已经实现了Ninject,并试图通过使用存储库模式来获取我的数据来抽象实体。我真的不觉得我对当前的项目做了很多改变,但出于某种原因,当我启动应用程序时,我得到了:

  

{“尚未启用角色管理器功能。”}

框架提供的ActionFilter是在以下情况下引发错误的地方:

  

WebSecurity.InitializeDatabaseConnection(“DefaultConnection”,“UserProfile”,“Id”,“UserName”,autoCreateTables:true);

被调用。

以下是一些堆栈跟踪:

  

[ProviderException:尚未启用角色管理器功能。]
  System.Web.Security.Roles.EnsureEnabled()+ 9561885
  System.Web.Security.Roles.get_Provider()+ 8
  WebMatrix.WebData.WebSecurity.InitializeProviders(DatabaseConnectionInfo   connect,String userTableName,String userIdColumn,String   userNameColumn,Boolean autoCreateTables)+104
  WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(字符串   connectionStringName,String userTableName,String userIdColumn,   String userNameColumn,Boolean autoCreateTables)+100
  InoutBoard.Core.Infrastructure.Filters.SimpleMembershipInitializer..ctor()   在c:\ Users \ Kyle \ Documents \ Visual Studio中   2012 \项目\ InoutBoard \ InoutBoard.Core \基础设施\过滤器\ InitializeSimpleMembershipAttribute.cs:42

     

[InvalidOperationException:ASP.NET简单成员资格数据库   无法初始化。有关详细信息,请参阅   http://go.microsoft.com/fwlink/?LinkId=256588]
  InoutBoard.Core.Infrastructure.Filters.SimpleMembershipInitializer..ctor()   在c:\ Users \ Kyle \ Documents \ Visual Studio中   2012 \项目\ InoutBoard \ InoutBoard.Core \基础设施\过滤器\ InitializeSimpleMembershipAttribute.cs:46

我在github上通过以下链接https://github.com/keroger2k/InoutBoard

托管代码

5 个答案:

答案 0 :(得分:25)

第一种方式

检查sphair's answer out(在当前主题中)。

第二种方式

将以下程序集添加到web.config

<system.web>
  <compilation debug="true" targetFramework="4.5">
    <assemblies>
      <add assembly="WebMatrix.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      <add assembly="WebMatrix.WebData, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </assemblies>
  </compilation>
</system.web>

<强>更新

WebMatrix.WebData程序集包含一个初始化成员资格/角色提供程序并启用RoleManager(PreApplicationStartCode.Start)的启动方法。但是ASP.NET无法在你的情况下运行。通过添加这两行代码,我们强制ASP.NET搜索这些程序集PreApplicationStartMethodAttribute(s)

答案 1 :(得分:10)

如果其他人收到此错误并且上述解决方案不起作用,就像我的情况一样。当我尝试添加程序集标记时,它表示无效的子对象。我必须指定roleManager和membership标识符,如下所示。一旦我这样做,更新数据库就可以了。

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

答案 2 :(得分:10)

我在我的托管公司运行时遇到了完全相同的错误(WinHost.com - 他们非常棒BTW)。

我的解决方案是添加到web.config:

<appSettings>
    <add key="enableSimpleMembership" value="true" />
</appSettings>

答案 3 :(得分:10)

而不是像Mehdi Golchin建议的那样将程序集添加到web.config,而是将WebMatrix.Data和WebMatrix.WebData上的程序集引用更改为CopyLocal = True。

答案 4 :(得分:0)