sql >> Base de Datos >  >> RDS >> Mysql

ASP.NET MVC 4 EF5 con MySQL

Debe configurar su configuración con una cadena de conexión, DbProviderFactory y un DatabaseInitializer personalizado para MySql Connector 6.5.4. He detallado los paso completo para reproducir EF5 y MySql, incluido el código para los inicializadores en mi blog . Si necesita una solución de proveedor de membresía ASP.Net, se le preguntó antes:Proveedores de roles/pertenencia de ASP.NET para MySQL? Publicaré la solución aquí también para una solución completa de EF5 MySql.

El conector MySql actualmente no admite la migración de EF 5 y ASP.NET solo admite SimpleMembership (valor predeterminado de MVC4) en MS SQL, no en MySql. La solución a continuación es para Code First.

Los pasos son:

  1. Obtenga EF 5 de NuGet
  2. Obtenga MySql.Data y MySql.Data.Entity de NuGet (6.5.4) o MySql (6.6.4)
  3. Configurar un proveedor de datos MySql
  4. Configurar una cadena de conexión MySql
  5. Cree un inicializador de base de datos MySql personalizado
  6. Configurar el inicializador de base de datos MySql personalizado
  7. Configure la membresía de ASP.NET si lo requiere

ProveedorDb

<system.data>
 <DbProviderFactories>
  <remove invariant="MySql.Data.MySqlClient"/>
  <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient"
    description=".Net Framework Data Provider for MySQL" 
    type="MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data" />
 </DbProviderFactories>
</system.data>

Cadena de conexión

<connectionStrings>
  <add name="ConnectionStringName" 
    connectionString="Datasource=hostname;Database=schema_name;uid=username;pwd=Pa$$w0rd;" 
    providerName="MySql.Data.MySqlClient" />
</connectionStrings>

Inicializador de base de datos

Si está utilizando el conector MySql de NuGet (6.5.4), se requiere un inicializador personalizado. Código disponible en http:// brice-lambson.blogspot.se/2012/05/using-entity-framework-code-first-with.html o en http://www.nsilverbullet.net/2012/11/07/6-steps-to-get-entity-framework-5-working-with-mysql-5-5/

Luego agregue esto a la configuración

<configSections>
  <section name="entityFramework" 
    type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, 
    EntityFramework, Version=5.0.0.0, Culture=neutral, 
    PublicKeyToken=b77a5c561934e089" />
</configSections>
<entityFramework>
  <contexts>
      <context type="Namespace.YourContextName, AssemblyName">
         <databaseInitializer 
           type="Namespace.YourChosenInitializer, AssemblyName">
         </databaseInitializer>
      </context>
    </contexts>
    <defaultConnectionFactory 
      type="MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data" />
</entityFramework>

Membresía de ASP.NET

<membership defaultProvider="MySqlMembershipProvider">
  <providers>
    <clear />
    <add name="MySqlMembershipProvider"
         type="MySql.Web.Security.MySQLMembershipProvider,
         MySql.Web, Version=6.5.4.0, PublicKeyToken=c5687fc88969c44d"
     autogenerateschema="true"
     connectionStringName="*NAME_OF_YOUR_CONN_STRING*"
     enablePasswordRetrieval="false"
     enablePasswordReset="true"
     requiresQuestionAndAnswer="false"
     requiresUniqueEmail="false"
     passwordFormat="Hashed"
     maxInvalidPasswordAttempts="5"
     minRequiredPasswordLength="6"
     minRequiredNonalphanumericCharacters="0"
     passwordAttemptWindow="10"
     passwordStrengthRegularExpression=""
     applicationName="/" />
  </providers>
</membership>

Haz que AccountController y Views funcionen:

  1. Elimine el MVC 4 AccountController, AccountModels, la carpeta de vista de cuenta y la vista compartida _LoginPartial
  2. Crear una nueva aplicación web MVC 3
  3. Copie MVC 3 AccountController, AccountModels, la carpeta de vista de cuenta y la vista compartida _LogOnPartial en su aplicación MVC 4
  4. Reemplace @Html.Partial(“_LoginPartial”) en la vista _Layout compartida con @Html.Partial(“_LogOnPartial”)