sql >> Database >  >> RDS >> Mysql

Twee verschillende providers op hetzelfde configuratiebestand

Allereerst gebruikt u de verkeerde configuratieklassen. Het DbConfigurationType heeft een type nodig dat is overgenomen van DbConfiguration en niet van DbMigrationsConfiguration<>.

De DbMigrationsConfiguration wordt eigenlijk alleen gebruikt voor de Migrators en 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

Helaas is het niet mogelijk, dus stel meerdere DefaultConnectionFactories in, zelfs met meerdere DbConfigurations.

In uw geval moet u de verbindingsreeksen opslaan in app.config en de naam doorgeven aan de DbContext-constructor.

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

        }

De verbinding wordt geïnitialiseerd op basis van de providernaam voor MyConnectionString in app.config

Of als u de verbindingsreeks in uw app.config niet wilt, geeft u gewoon een reeds geïnitialiseerde DbConnection door aan de DbContext-constructor

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

        }

Of als u een specifieke verbinding niet wilt initialiseren, gebruikt u de 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. Een jaar aftrekken van een datum in MariaDB

  2. Gebruik van jokertekens in mysql-tabelnaam

  3. Update met parameter met behulp van de permanente bibliotheek van de kamer

  4. Een groot probleem:SQL Server 2016 Service Pack 1