sql >> Database teknologi >  >> RDS >> Mysql

To forskellige udbydere på den samme konfigurationsfil

Først og fremmest bruger du de forkerte konfigurationsklasser. DbConfigurationType har brug for en type, der er arvet fra DbConfiguration, ikke DbMigrationsConfiguration<>.

DbMigrationsConfiguration bruges egentlig kun til migratorer og databaseinitialiserere.

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

Desværre er det ikke muligt, så indstil flere DefaultConnectionFactories selv med flere DbConfigurations.

I dit tilfælde bliver du nødt til at gemme forbindelsesstrengene i app.config og videregive navnet til DbContext-konstruktøren.

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

        }

Forbindelsen vil blive initialiseret baseret på udbydernavnet for MyConnectionString i app.config

Eller hvis du ikke vil have forbindelsesstrengen i din app.config, skal du bare sende en allerede initialiseret DbConnection til DbContext-konstruktøren

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

        }

Eller hvis du ikke ønsker at initialisere en specifik forbindelse, brug 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. Sådan får du kun den første række fra et resultatsæt

  2. Sådan sender du C++ og mysql dynamiske mysql-forespørgsler

  3. Kopier en MySQL-tabel inklusive indekser

  4. Dvale kortlægning MySQL DateTime