Aquí es lo que hice.
Necesitaba un servicio para iniciar automáticamente y conectarme a una base de datos MS SQL como parte de su inicio. Esto significa que el nombre de la cadena de conexión DB se debe almacenar en el registro y que la cadena almacenada en el registro debe corresponder a una cadena de conexión definida. La respuesta fue un pequeño applet WinForm que administraba el almacenamiento de registro de los parámetros de inicio para el servicio donde uno de los parámetros storde era el nombre de la cadena de conexión DB.
Agregué dos funciones estáticas a la clase de contexto de la base de datos creada por Linq. Un método enumera los nombres de conexión DB definidos en la sección de configuración para el proyecto DB. El segundo método me devuelve un contexto de base de datos desde el nombre de la conexión DB. El applet de gestión de registro llamaba al método del enumerador para completar el cuadro de lista y el servicio de Windows llamaba al método GetDBContextFromConnectionName() para convertir el nombre de la conexión de base de datos recuperada del registro en un contexto de base de datos. el contexto de la base de datos se utilizó entonces para el acceso a la base de datos.
Estos dos métodos se colocaron en un archivo de clase que agregué al proyecto que tenía el mismo nombre que la clase de contexto de datos creada por Linq.
El resultado fue: ` usando Sistema; usando System.Configuration; usando System.Collections.Generic; usando System.Collections;
namespace RepositoryProject
{
public partial class RepositoryDataContext
{
/// <summary>
/// Return a MS SQL-LINQ DB Context given the name of the DB Connection name defined in
/// Properties.Settings.Default area of the SQL-Linq project.
/// </summary>
/// <param name="dbConnectionName">The name of the prediefined DB Connection string</param>
/// <returns>A SQL-Linq database context </returns>
public static RepositoryDataContext GetDBContextFromConnectionName(string dbConnectionName)
{
string fullConnectionString = null;
dbConnectionName = dbConnectionName.Trim();
if (!String.IsNullOrEmpty(dbConnectionName))
{
SettingsPropertyCollection allConnectionStrings = global::Cognex.TA.Framework.Properties.Settings.Default.Properties;
SettingsProperty connectionProperty = allConnectionStrings[dbConnectionName];
if (null != connectionProperty)
{
fullConnectionString = (string) connectionProperty.DefaultValue;
if (String.IsNullOrEmpty(dbConnectionName))
{
string msg = "";
msg += String.Format("The connection string name, {0}, exists within the settings of the RepositoryDataContext class but creates an empty DB connection string.", dbConnectionName);
throw new ArgumentException(msg);
}
}
else
{
string msg = "";
msg += String.Format("The connection string name, {0}, does not exist within the settings of the RepositoryDataContext class.", dbConnectionName);
throw new ArgumentException(msg);
}
}
else
{
string msg = "";
msg += "The connection string name to the test repository cannot be null or empty.";
throw new ArgumentException(msg);
}
return new RepositoryDataContext(fullConnectionString);
}
/// <summary>
/// Return a list of all the DB Connection names defined in
/// Properties.Settings.Default area of the SQL linq project.
/// </summary>
/// <returns>A list of DB Connection name</returns>
public static List<string> GetAllDBConnectionNames()
{
List<string> listONames = new List<string>();
/*
* within the the Linq-generated code (TestRepository.designer.cs) there is an empty constructor for
* the data context which looks similar to this:
*
* public TestRepositoryDataContext() :
* base(global::Framework.Properties.Settings.Default.DefaultConnectionString, mappingSource)
* {
OnCreated();
* }
*
* Duplicate that assembly name here
*/
SettingsPropertyCollection allConnectionStrings = global::Framework.Properties.Settings.Default.Properties;
foreach(SettingsProperty entry in allConnectionStrings)
{
if (entry.PropertyType.ToString().Equals("System.String"))
{
listONames.Add(entry.Name);
}
}
return listONames;
}
}
}
`
espero que esto ayude.
He buscado a lo largo y ancho y no puedo encontrar el enlace actualizado al tutorial al que hace referencia ... ¿Tendría un enlace actualizado a él? – ecoe
@ecoe Lo he encontrado en [Wayback Machine] (http://web.archive.org/web/20120307192453/http://davidhayden.com/blog/dave/archive/2007/02/22/ReadConnectionStringsWebConfigAppConfig .aspx) – Justin