sql >> データベース >  >> RDS >> Mysql

同じ構成ファイル上の2つの異なるプロバイダー

    まず、間違った構成クラスを使用しています。 DbConfigurationTypeには、DbMigrationsConfiguration<>ではなくDbConfigurationから継承されたタイプが必要です。

    DbMigrationsConfigurationは、実際にはMigratorsと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
    

    残念ながら、それは不可能なので、複数のDbConfigurationsを使用しても複数のDefaultConnectionFactoriesを設定します。

    あなたの場合、接続文字列をapp.configに保存し、その名前をDbContextコンストラクターに渡す必要があります。

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

    接続は、app.config

    のMyConnectionStringのプロバイダー名に基づいて初期化されます。

    または、app.configに接続文字列を含めたくない場合は、すでに初期化されているDbConnectionをDbContextコンストラクターに渡すだけです

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

    または、特定の接続を初期化しない場合は、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. MariaDBでのMICROSECOND()の動作

    2. PostgreSQLで列のデフォルト値を変更するにはどうすればよいですか?

    3. 年を保存するためのMySQLタイプ:SmallintまたはVarcharまたはDate?

    4. OracleのLikeとContains()の検索基準の違い