EF6默认角色提供程序“找不到方法”

时间:2014-01-08 20:26:40

标签: c# .net-4.5 asp.net-mvc-5 entity-framework-6

我使用EF6构建和MVC5 Web应用程序,我想使用defualtRoleProvider和defaultMemberShip提供程序,但我收到此错误

System.MissingMethodException:找不到方法:'System.Data.Objects.ObjectContext System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext()'。

在web.config中我把这段代码

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"/>
  </providers>
</membership>
<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
  <providers>
    <add connectionStringName="DefaultConnection" applicationName="/" name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers"/>
  </providers>
</roleManager>

当我调用此方法时出现错误

if (Roles.RoleExists("CustomerService") == false)
{
    Roles.CreateRole("CustomerService");
}

我首先使用现有数据库代码

请帮忙吗?

1 个答案:

答案 0 :(得分:0)

几个月前我遇到过类似的问题。从(至少)使用Visual Studio 2012推出的ASP.NET默认成员资格版本开始,成员资格使用Entity Framework进行数据库交互。与VS2012一起推出的版本与早期版本的EF绑定,与EF6不兼容。

如果有些模糊,解决方案很简单。与VS 2012一起推出的会员形式也作为Microsoft ASP.NET Universal Providers Core(版本1)推广到NuGet。他们发布了 与EF6兼容的新版本(版本2)。转到NuGet,下载Microsoft ASP.NET Universal Providers Core。然后确保更新web.config以引用适当版本的提供程序库(当前为2.0.0)。

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

如果您使用的是Web表单,请同时更新会话提供程序。

<sessionState mode="InProc" customProvider="DefaultSessionProvider">
  <providers>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="FirstChoice" />
  </providers>
</sessionState>