Mysql
 sql >> Base de données >  >> RDS >> Mysql

Deux fournisseurs différents sur le même fichier de configuration

Tout d'abord, vous utilisez les mauvaises classes de configuration. Le DbConfigurationType a besoin d'un type hérité de DbConfiguration et non de DbMigrationsConfiguration<>.

Le DbMigrationsConfiguration est vraiment utilisé pour les Migrators et DatabaseInitializers.

public class MyDbConfiguration : DbConfiguration
{
    public MyDbConfiguration()
    {
        this.SetDefaultConnectionFactory(new System.Data.Entity.Infrastructure.SqlCeConnectionFactory("System.Data.SqlServerCe.4.0"));

        this.SetProviderServices("System.Data.SqlServerCe.4.0", SqlCeProviderServices.Instance);

        this.AddInterceptor(new NLogCommandInterceptor());// guardar logs

        this.SetMigrationSqlGenerator("System.Data.SqlServerCe.4.0", () => new SqlCeMigrationSqlGenerator());
    }
}

[DbConfigurationType(typeof(MyDbConfiguration))]
public class TestContext : DbContext

Malheureusement, ce n'est pas possible, alors définissez plusieurs DefaultConnectionFactories même avec plusieurs DbConfigurations.

Dans votre cas, vous devrez stocker les chaînes de connexion dans le app.config et transmettre le nom au constructeur DbContext.

public class TestContext : DbContext
    {
        public TestContext()
            : base("name=MyConnectionString")
        {

        }

La connexion sera initialisée en fonction du nom du fournisseur pour MyConnectionString dans app.config

Ou si vous ne voulez pas la chaîne de connexion dans votre app.config, passez simplement une DbConnection déjà initialisée au constructeur DbContext

public class TestContext : DbContext
    {
        public TestContext()
            : base(new SqlCeConnection(GetConnectionString()),true)
        {

        }

Ou si vous ne souhaitez pas initialiser une connexion spécifique, utilisez DbProviderFactory.

public class TestContext : DbContext
    {
        public TestContext()
            : base(GetConnection(),true)
        {

        }

        public static DbConnection GetConnection() { 
            var factory = DbProviderFactories.GetFactory("System.Data.SqlServerCe.4.0");
            var connection = factory.CreateConnection();
            connection.ConnectionString = "Data Source=C:/teste2.sdf;Persist Security Info=False;";
            return connection;
        }