Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dwóch różnych dostawców na tym samym pliku konfiguracyjnym

Przede wszystkim używasz niewłaściwych klas konfiguracyjnych. DbConfigurationType wymaga typu dziedziczonego z DbConfiguration, a nie z DbMigrationConfiguration<>.

Konfiguracja DbMigrationsConfiguration jest tak naprawdę używana tylko dla Migratorów i 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

Niestety nie jest to możliwe, więc ustaw wiele DefaultConnectionFactories nawet przy wielu konfiguracjach Db.

W twoim przypadku będziesz musiał przechowywać parametry połączenia w app.config i przekazać nazwę do konstruktora DbContext.

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

        }

Połączenie zostanie zainicjowane na podstawie nazwy dostawcy dla MyConnectionString w app.config

Lub jeśli nie chcesz, aby parametry połączenia w twoim app.config po prostu przekaż już zainicjowany DbConnection do konstruktora DbContext

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

        }

Lub jeśli nie chcesz inicjować określonego połączenia, użyj 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;
        }


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problem z MySQL:LEFT JOIN na pustej tabeli

  2. Jak wykonać zapytanie SQL rodzic-dziecko dla określonego formatu JSON?

  3. MySql :Sortuj według i Grupuj, łącząc nie dając najnowszego rekordu

  4. Jak wygenerować numerację sekwencyjną w wordpressie

  5. Błąd CodeIgniter - nie można połączyć się z bazą danych przy użyciu dostarczonych ustawień