Aquí está mi diseño propuesto (muy simplificado para ilustrar el espacio problemático) para una aplicación de consola C#. Las conexiones de la base de datos implementan IDisposable, y esta solución no permite using
los objetos de conexión de la base de datos. ¿Alguien puede proponer una estructura más correcta para una aplicación de consola? Este es un problema que necesito resolver a menudo.¿Cómo estructurar una aplicación de consola C# para usar de forma eficiente los recursos de base de datos IDisposable?
class Program
{
SQLiteConnection sourceConnection;
SQLiteConnection destinationConnection;
static void Main(string[] args)
{
Program shell = new Program();
// get connection strings from command line arguments
string sourceConnectionString = shell.getConnectionString(args);
string destinationConnectionString = shell.getConnectionString(args);
// call non-static methods that use
shell.setUpConnections(sourceConnectionString, destinationConnectionString);
shell.doDatabaseWork();
}
private void setUpConnections(string sourceConnectionString, string destinationConnectionString)
{
sourceConnection = new SQLiteConnection(sourceConnectionString);
destinationConnection = new SQLiteConnection(destinationConnectionString);
}
private void doDatabaseWork()
{
// use the connections here
}
}
Editar:
Algunas personas no pueden entender por qué me gustaría que ellos como variables miembro. Aquí está mi caso de uso (un poco psuedocoded) de lo que iría en doDatabaseWork:
foreach (Row sourceRow in DBResultSet)
{
string sourceXml = sourceRow.Columns["MyColumnName"].Value;
string destinationXML = transformUsingXSLT(sourceXml);
writeToDestination(destinationXml);
}
Vea cómo me gustaría mantener estas conexiones abiertas por la vida de este bucle?
RE: Editar. Todavía ... no –