Oracle
 sql >> Database >  >> RDS >> Oracle

Mantenere un database dell'applicazione indipendente (ADO.NET vs incapsulamento della logica DB)

Nota: Questa risposta è rilevante se decidi di utilizzare la funzionalità di base di ADO.NET 2 invece di un ORM (come Entity Framework o NHibernate) o LINQ to SQL.

Supponiamo che tu abbia una stringa di connessione definita nel tuo app.config :

<connectionStrings>
    <add name="SomeConnection"
         providerName="System.Data.SqlClient"
         connectionString="..." />
</connectionStrings>

Notare la presenza del providerName attributo e il suo valore. Potresti anche inserire un valore per un altro provider di database, ad es. System.Data.SQLite .

(Si noti che i provider non standard, ovvero quelli che non sono in .NET Framework per impostazione predefinita, devono essere prima registrati, in app.config o nel machine.config della macchina client .)

Ora puoi lavorare con il database specificato in modo completamente indipendente dal provider come segue:

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();
    }
}

Nota come questo codice funziona solo con i tipi di interfaccia. L'unico punto in cui indichi un particolare provider di database è tramite il providerName valore dell'attributo in app.config file. (Ho contrassegnato tutti i punti in cui un'impostazione da app.config è preso con ^^^ s.)

Ulteriori letture:

  • Codifica generica con le classi e le fabbriche di base di ADO.NET 2.0:
    simile alla mia risposta, ma entra più in dettaglio.

  • Provider ADO.NET gestiti e centro per sviluppatori di set di dati:
    include, tra le altre cose, un indice dei provider di database ADO.NET disponibili.