Saltar al contenido

Conexión de base de datos MySQL dinámica para Entity Framework 6

Ya no necesitas investigar más por internet porque llegaste al sitio justo, tenemos la respuesta que buscas pero sin liarte.

Solución:

Entity Framework 6 ofrece algunos cambios sutiles útiles que ayudan a que MySQL funcione y también a crear conexiones de bases de datos dinámicas.

Hacer que MySQL funcione con Entity Framework 6

Primero, a la fecha de mi respuesta a esta pregunta, los únicos controladores de conector .Net compatibles con EF6 son MySQL .Net Connectior 6.8.1 (versión de desarrollo Beta) que se puede encontrar en el sitio web oficial de MySQL aquí.

Después de la instalación, haga referencia a los siguientes archivos de su solución de Visual Studio:

  • Mysql.Data.dll
  • Mysql.Data.Entity.EF6.dll

También deberá copiar estos archivos en algún lugar donde el proyecto pueda acceder a ellos durante el tiempo de compilación, como el directorio bin.

A continuación, debe agregar algunos elementos a su archivo Web.config (o App.config si está basado en el escritorio).

Una conexión string:


    

Agregue también el proveedor, dentro del y nodos, opcionalmente (esto es una necesidad absoluta en la segunda parte de mi respuesta, cuando se trata de bases de datos definidas dinámicamente) puede cambiar el nodo:


    
    
        
    

Si cambia la fábrica de conexión predeterminada de la conexión del servidor sql predeterminado, no olvide eliminar el nodos que están anidados en el nodo defaultConnectionFactory. MysqlConnectionFactory no toma ningún parámetro para su constructor y fallará si los parámetros todavía están allí.

En esta etapa, es bastante fácil conectarse a MySQL con Entity, solo puede referirse a la cadena de conexión anterior por su nombre. Tenga en cuenta que si se conecta por nombre, esto funcionará incluso si el defaultConnectionFactory el nodo todavía apunta a SQL Server (que lo hace de forma predeterminada).

public class ApplicationDbContext: DbContext

    public ApplicationDbContext() : base("mysqlCon")
    
    

El es sólo una cuestión de conectar normalmente:

ApplicationDbContext db = ApplicationDbContext();

Conexión a un nombre de base de datos seleccionado dinámicamente

En este punto, es fácil conectarse a una base de datos que podemos pasar como parámetro, pero hay algunas cosas que debemos hacer.

Nota IMPORTANTE

Si aún no lo ha hecho, DEBE cambiar la fábrica de conexión predeterminada en Web.config si desea conectarse a MySQL dinámicamente. Ya que estaremos pasando una conexión string directamente al constructor de contexto, no sabrá qué proveedor usar y volverá a su fábrica de conexiones predeterminada a menos que se especifique en web.config. Vea arriba sobre cómo hacer eso.

Podrías pasar una conexión string manualmente al contexto como este:

public ApplicationDbContext() : base("Server:localhost;...")


Pero para hacerlo un poco más fácil, podemos hacer un pequeño cambio en la conexión. string hicimos arriba al configurar mySQL. Simplemente agregue un marcador de posición como se muestra a continuación:


Ahora podemos construir un método auxiliar y cambiar la clase ApplicationDbContext como se muestra a continuación:

public class ApplicationDbContext: DbContext

    public ApplicationDbContext(string dbName) : base(GetConnectionString(dbName))
    
    

    public static string GetConnectionString(string dbName)
    
        // Server=localhost;Database=0;Uid=username;Pwd=password
        var connString = 
            ConfigurationManager.ConnectionStrings["mysqlCon"].ConnectionString.ToString();

        return String.Format(connString, dbName);
    

Si está utilizando migraciones de base de datos, el siguiente paso es importante

Si está utilizando migraciones, encontrará que el marco de trabajo pasará ApplicationDbContext a su método Seed y fallará porque no pasará el parámetro que pusimos para el nombre de la base de datos.

Agregue la siguiente clase al final de su clase de contexto (o en cualquier lugar realmente) para resolver ese problema.

public class MigrationsContextFactory : IDbContextFactory

    public ApplicationDbContext Create()
    
        return new ApplicationDbContext("developmentdb");
    

Sus migraciones de código primero y métodos de inicialización ahora se dirigirán a la developmentdb esquema en su base de datos MySQL.

Espero que esto ayude a alguien 🙂

Nos puedes animar nuestra investigación poniendo un comentario y valorándolo te estamos eternamente agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *