2012-09-13 15 views
8

Estoy escribiendo un sitio web MVC4 usando Microsoft Visual Studio express 2012 para web. Siempre que corro "Actualización de Base de datos" en la consola de Administrador de paquetes, produce la excepción siguiente:"Membership.Provider debe ser una instancia de ExtendedMembershipProvider"

 
To call this method, the "Membership.Provider" property must be an instance 
of "ExtendedMembershipProvider". 

Este es mi método de semillas:

protected override void Seed(GNSystem.Models.DataContext context) 
    { 
     context.Forums.AddOrUpdate(
         new Forum { ForumName = "Hello" }, 
         new Forum { ForumName = "World" }, 
         new Forum { ForumName = "!" } 
         ); 
     context.UserProfiles.Add(new UserAccount { UserName = "Gilad", EMail = "[email protected]" }); 
     WebSecurity.CreateUserAndAccount("Gilad", "123456"); 
     WebSecurity.Login("Gilad", "123456"); 
     context.Threads.AddOrUpdate(
      new Thread { Subject = "FirstThread", Content = "Awesome Content", ForumID = 1, UserID = 1 }, 
      new Thread { Subject = "SecondThread", Content = "Awesome Content", ForumID = 1, UserID = 1 } 
      ); 
    } 

Busqué solutions y añade la siguiente directiva en el archivo Web.config:

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

pero la excepción se produce, no obstante.

¿Cuál es la causa de esto? Edición 1:

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=169433 
    --> 
<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <connectionStrings> 
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-GNSystem-20120913165926;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-GNSystem-20120913165926.mdf" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <appSettings> 
    <add key="enableSimpleMembership" value="true" /> 
    <add key="webpages:Version" value="2.0.0.0" /> 
    <add key="webpages:Enabled" value="false" /> 
    <add key="PreserveLoginUrl" value="true" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" timeout="2880" /> 
    </authentication> 
    <pages> 
     <namespaces> 
     <add namespace="System.Web.Helpers" /> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Optimization" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="System.Web.WebPages" /> 
     </namespaces> 
    </pages> 
    </system.web> 
    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
    </system.webServer> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    </entityFramework> 
</configuration> 
+0

¿Tiene un proveedor de membresía personalizado? –

+0

No es que yo sepa. –

+0

¿Tiene una sección de membresía en su web.config? Actualiza tu pregunta con esto. –

Respuesta

10

Antes de poder utilizar WebSecurity.CreateUserAndAccount("Gilad", "123456"); SimpleMembership debe ser inicializado. Esto normalmente se realiza en AccountController con el atributo [InitializeSimpleMembership], pero como intenta llamar a estos métodos dentro de su Seed, deberá inicializarlo de otra manera.

+0

Muchas gracias :) –

3
protected override void Seed(eManager.Web.Infrastructure.DepartmentDb context) 
{ 
    context.Departments.AddOrUpdate(d => d.Name, 
       new Department() { Name = "Engineering" }, 
       new Department() { Name = "Sales" }, 
       new Department() { Name = "Shipping" }, 
       new Department() { Name = "Human Resources" }); 

    if (!Roles.RoleExists("Admin")) 
    { 
    Roles.CreateRole("Admin"); 
    } 

    if (Membership.GetUser("wayne") == null) 
    { 
    Membership.CreateUser("wayne", "[email protected]"); 
    Roles.AddUserToRole("wayne", "Admin"); 
    } 
0

Compruebe que el proveedor de Membresía que utiliza en esta aplicación hereda de MembershipProvider o ExtendedMembershipProvider. Asegúrese de heredar de la clase ExtendedMembershipProvider.

Cuestiones relacionadas