sql >> Databáze >  >> RDS >> Mysql

Dva různí poskytovatelé ve stejném konfiguračním souboru

Za prvé, používáte špatné konfigurační třídy. DbConfigurationType potřebuje typ zděděný z DbConfiguration, nikoli DbMigrationsConfiguration<>.

DbMigrationsConfiguration se ve skutečnosti používá pouze pro migrátory a inicializátory databáze.

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

Bohužel to není možné, takže nastavte více DefaultConnectionFactories i s více DbConfigurations.

Ve vašem případě budete muset uložit připojovací řetězce do app.config a předat název konstruktoru DbContext.

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

        }

Připojení bude inicializováno na základě názvu poskytovatele pro MyConnectionString v souboru app.config

Nebo pokud nechcete připojovací řetězec v app.config, předejte již inicializované DbConnection konstruktoru DbContext

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

        }

Nebo pokud nechcete inicializovat konkrétní připojení, použijte 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. Oprava chyby „ORA-01790:výraz musí mít stejný datový typ jako odpovídající výraz“

  2. Jak vybrat správné datové typy

  3. Začínáme s MariaDB pomocí Docker, Java Spring a JDBC

  4. Hledání funkční závislosti