Enterprise Library – Alterando fonte de conexão de dados
Olá pessoal!
No post de hoje vou abordar como alterar a fonte das connection strings sem a necessidade de alterar todos os locais onde utilizamos as funções de banco de dados. No projeto utilizamos Enterprise Library Data Access Application Block.
No caso o exemplo trata de uma conexão com Banco de dados Sql Server que eu gostaria de deixar fixo no código (a evolução disso poderia ser buscar em um serviço WCF).
Geralmente utilizamos o seguinte código para obter um objeto Database (que é uma classe abstrata, que encapsula os métodos e funções para acesso ao banco de dados, permitindo uma fácil troca de SGBD, de Sql Server para Oracle por exemplo, apenas mudando nos arquivos de configuração)
Database db = DatabaseFactory.CreateDatabase("Conexao");
Baseado na seguinte discussão: https://entlib.codeplex.com/discussions/212146, desenvolvi o seguinte código (simplificado):
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Button_Click_1(object sender, RoutedEventArgs e) { try { Database db = DatabaseFactory.CreateDatabase("Conexao"); db.ExecuteNonQuery(CommandType.Text, "SELECT * FROM TPrin"); } catch { } } } [ConfigurationElementType(typeof(SqlConnectionDatabaseProviderData))] public class SqlConnectionDatabaseProvider : SqlDatabase { public SqlConnectionDatabaseProvider(string connectionString) : base(connectionString) { } public SqlConnectionDatabaseProvider(string connectionString, IDataInstrumentationProvider instrumentationProvider) : base(connectionString, instrumentationProvider) { } } public class SqlConnectionDatabaseProviderData : SqlDatabaseData { protected ConnectionStringSettings ConnectionStringSettings { get; private set; } /// <summary> /// Gets the connection string for the represented database. /// </summary> public string ConnectionString { get { return this.ConnectionStringSettings.ConnectionString; } } public SqlConnectionDatabaseProviderData(ConnectionStringSettings connectionStringSettings, IConfigurationSource configurationSource) : base(connectionStringSettings, configurationSource) { //SET YOUR CONNECTION STRING HERE System.Configuration.ConnectionStringSettings settings = new ConnectionStringSettings("Conexao", "Data Source=(local);Initial Catalog=tuco;Integrated Security=True"); this.ConnectionStringSettings = settings; } public override IEnumerable<TypeRegistration> GetRegistrations() { yield return new TypeRegistration<Database>(() => new SqlDatabase(this.ConnectionString, Container.Resolved<IDataInstrumentationProvider>(this.Name))) { Name = base.Name, Lifetime = TypeRegistrationLifetime.Transient }; yield break; } }
Abraços pessoal! Até a próxima!
- Criar uma solução é simples! Para o cliente
- Interoperabilidade: Sistema Operacional 64-bits + Sql Server 2008 vs Legado VB6/C++ 32-bits