Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zwei verschiedene Anbieter auf der gleichen Konfigurationsdatei

Erstens verwenden Sie die falschen Konfigurationsklassen. Der DbConfigurationType benötigt einen Typ, der von DbConfiguration geerbt wird, nicht von DbMigrationsConfiguration<>.

Die DbMigrationsConfiguration wird wirklich nur für die Migrators und DatabaseInitializers verwendet.

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

Leider ist es nicht möglich, mehrere DefaultConnectionFactories zu setzen, auch nicht mit mehreren DbConfigurations.

In Ihrem Fall müssen Sie die Verbindungszeichenfolgen in der app.config speichern und den Namen an den DbContext-Konstruktor übergeben.

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

        }

Die Verbindung wird basierend auf dem Anbieternamen für MyConnectionString in der app.config

initialisiert

Oder wenn Sie die Verbindungszeichenfolge nicht in Ihrer app.config haben möchten, übergeben Sie einfach eine bereits initialisierte DbConnection an den DbContext-Konstruktor

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

        }

Oder wenn Sie keine bestimmte Verbindung initialisieren möchten, verwenden Sie die 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;
        }