2016-07-12 16 views
0

私はDbContextを持っている:のAppSettings値によると、今プログラムでDbConfigurationTypeを選択するにはどうすればよいですか?

[DbConfigurationType(typeof(MySqlEFConfiguration))] 
public class MyDbContext : DbContext 
{ 
    public DbSet<MyClass> MyClasses { get; set; } 
} 

私は別のDbConfigurationTypeを使用することができるようにしたい場合は何?

だから、私はMySQLからMSSQLへのAppSettings値を変更すると、それは次のようになります。もちろん

[DbConfigurationType(typeof(MsSqlEFConfiguration))] 
public class MyDbContext : DbContext 
{ 
    public DbSet<MyClass> MyClasses { get; set; } 
} 

、私は工場を作成し、カスタム属性を使用して新しいクラスを作成するためにリフレクションを使用することができます。しかし、反射がない解決策はありますか?

+0

@設定タイプが異なる場合、 'MySqlEFConfiguration'と' MsSqlEFConfiguration' – stuartd

+0

Pardon!私の怠惰な目... –

+0

この回答を見てください:http://stackoverflow.com/questions/20354083/ef6-and-multiple-configurations-sql-server-and-sql-server-compact –

答えて

1

私はDbConfigurationTypeAttributeから継承して問題を解決しています

public class BaseEfConfiguration : DbConfigurationTypeAttribute 
{ 
    public BaseEfConfiguration() : base(SqlConfiguration) 
    { 
    } 

    public static Type SqlConfiguration 
    { 
     get 
     { 
      string databaseTypeName = ConfigurationManager.AppSettings["DatabaseType"]; 
      switch (databaseTypeName) 
      { 
       case "MySQL": 
        return typeof(MySqlEFConfiguration); 
       case "MSSQL": 
        return typeof(MsSqlEFConfiguration); 
       default: 
        throw new NotImplementedException($"No such SQL configuration type {databaseTypeName}"); 
      } 
     } 
    } 
} 

[BaseEfConfiguration] 
public class BaseDbContext : DbContext 
{ 

} 
0

あなたはそれがロックされている前に、設定を傍受、実行時に登録した属性を置き換えることができます。

DbConfiguration.Loaded += (_, a) => 
    { 
     a.ReplaceService<DbProviderServices>((s, k) => new MyProviderServices(s)); 
     a.ReplaceService<IDbConnectionFactory>((s, k) => new MyConnectionFactory(s)); 
    }; 

Source

関連する問題