2014-01-08 1 views
1

Я использую Ef6 для создания и MVC5 веб-приложений, и я хочу, чтобы использовать поставщик defualtRoleProvider и defaultMemberShip, но я получил эту ошибкуEF6 поставщика ролей по умолчанию «метод не найден»

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"); 
} 

Я использую код сначала с существующей базой данных,

Любая помощь, пожалуйста?

ответ

0

У меня была аналогичная проблема несколько месяцев назад. Начиная с (по крайней мере) версии членства по умолчанию в ASP.NET, которая была развернута с помощью Visual Studio 2012, членство использует Entity Framework для взаимодействия с базами данных. Версия, развернутая с VS2012, привязана к более ранней версии EF и несовместима с EF6.

Решение прост, если несколько неясное. Форма членства, развернутая с VS 2012, также была выпущена в NuGet в качестве Microsoft ASP.NET Universal Providers Core (версия 1). Они выпустили новую версию (версия 2), что -, совместимый с EF6. Перейдите в 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> 

Если вы используете веб-формы, также обновите поставщика сеансов.

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