Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Mantendo um banco de dados de aplicativo agnóstico (ADO.NET versus lógica de banco de dados encapsulada)


Observação: Esta resposta é relevante se você decidir usar a funcionalidade básica do ADO.NET 2 em vez de um ORM (como Entity Framework ou NHibernate) ou LINQ to SQL.

Vamos supor que você tenha uma string de conexão definida em seu app.config :
<connectionStrings>
    <add name="SomeConnection"
         providerName="System.Data.SqlClient"
         connectionString="..." />
</connectionStrings>

Observe a presença do providerName atributo e seu valor. Você também pode colocar um valor para outro provedor de banco de dados, por exemplo System.Data.SQLite .

(Observe que provedores não padrão, ou seja, aqueles que não estão no .NET Framework por padrão, precisam ser registrados primeiro, seja em app.config ou no machine.config da máquina cliente .)

Agora, você pode trabalhar com o banco de dados especificado de maneira totalmente independente do provedor da seguinte maneira:
using System.Configuration;  // for ConfigurationManager
using System.Data;           // for all interface types
using System.Data.Common;    // for DbProviderFactories

var cs = ConfigurationManager.ConnectionStrings["SomeConnection"];
//                                              ^^^^^^^^^^^^^^^^

var factory = DbProviderFactories.GetFactory(cs.ProviderName);
//                                           ^^^^^^^^^^^^^^^

using (IDbConnection connection = factory.CreateConnection())
{
    connection.ConnectionString = cs.ConnectionString;
    //                            ^^^^^^^^^^^^^^^^^^^
    connection.Open();
    try
    {
        using (IDbCommand command = connection.CreateCommand())
        {
            ...  // do something with the database
        }
    }
    finally
    {
        connection.Close();
    }
}

Observe como esse código funciona apenas com tipos de interface. O único lugar onde você indica um provedor de banco de dados específico é através do providerName valor do atributo no app.config Arquivo. (Marquei todos os lugares onde uma configuração de app.config é obtido com ^^^ s.)

Leitura adicional:


  • Codificação genérica com as classes base e fábricas do ADO.NET 2.0:
    semelhante à minha resposta, mas entra em mais detalhes.

  • ADO.NET Managed Providers e DataSet Developer Center:
    inclui, entre outras coisas, um índice de provedores de banco de dados ADO.NET disponíveis.