2009-07-27 9 views
13

Necesito establecer mi cadena de conexión para Linq a Sql en función de una variable de entorno. Tengo una función que devolverá la cadena de conexión desde web.config en función de la variable de entorno, pero ¿cómo hago para que Linq use siempre esta cadena de conexión "creada dinámicamente" (preferiblemente sin tener que especificarla cada vez)?Linq a SQL - Establecer cadena de conexión de forma dinámica en función de la variable de entorno

Sé que puedo especificar la cadena de conexión utilizando el constructor, pero ¿cómo funciona eso cuando se utiliza el contexto de datos en un LinqDataSource?

Respuesta

18

Uso:

MyDataClassesDataContext db = new MyDataClassesDataContext(dynamicConnString); 

Para una LinqDataSource, interceptar el evento ContextCreating y crear el DataContext manualmente que el anterior:

protected void LinqDataSource_ContextCreating(object sender, LinqDataSourceContextEventArgs e) 
{ 
    e.ObjectInstance = new MyDataClassesDataContext (dynamicConnString); 
} 

De MSDN:

Por defecto, el LinqDataSource control crea una instancia del tipo que se especifica en la propiedad ContextTypeName . El control LinqDataSource llama al constructor predeterminado del objeto de contexto de datos para crear una instancia del objeto. Es posible que debe utilizar un constructor no predeterminado o debe crear un objeto que difiera del especificado en la propiedad ContextTypeName . En ese caso, debe manejar el evento ContextCreating y crear manualmente el objeto de contexto de datos .

+0

¿Funciona esto al usar el DataContext con un LinqDataSource? por ejemplo, ¿cómo iba a establecer la cadena de conexión aquí: Ryan

+0

Se puede, si Editado – JoshJordan

6
  • abrir el LINQ a diseñador de SQL, y abra la pestaña Propiedades del diseñador (el esquema en sí), expanda conexión y ajuste Application Settings a False. Salvar.

  • Cierre eso y abra su archivo de diseñador DataContext (dbml_name.designer.cs) y modifique el constructor DataContext. Notarás inmediatamente cómo la cadena de conexión decidió saltar aquí al desactivar la configuración de toda la aplicación. Entonces la parte para enfocarse aquí es alterar el heredero base(). Renombrar ConnString "a continuación para que se adapte al suyo. También noté un DatabaseAttribute en la clase que no creo juega un papel importante y tiene implicaciones en la configuración de conexión.También necesitará una referencia a System.Configuration:

    dbDataContext pública(): base (. ConfigurationManager.ConnectionStrings [ "myConnString"] ConnectionString, mappingSource)

  • Abra la App.config o Web.config presentado en el proyecto donde su LINQ a clases SQL residen, y cambiar el nombre de la cadena de conexión a lo que definió como "MyConnString".

  • Ahora debe cortar toda la entrada con el cambio de nombre y pegarlo en cualquiera de los App.config o Web.config de la aplicación que se va a acceder a los datos, tales como una aplicación web, Silverlight, WPF, WCF, etc. Es importante que modifique el archivo de configuración de la aplicación que realiza la llamada para acceder a los datos, ya que el ConfigurationManager definido en sus clases LINQ to SQL buscará el archivo .config desde donde se ejecuta la aplicación llamante, sin importar dónde estén sus clases LINQ to SQL han sido Definidos Como puede ver, funciona de forma un poco diferente a antes.

  • clic derecho y Ahora abrir las ofertas en su DAL o proyecto que contiene su LINQ a clases SQL y quitar la conexión de cadena “Configuración de aplicaciones” referencia en la ficha Configuración.

  • Reconstruir. Ya terminaste, ahora haz una comprobación de Buscar en archivos para ver si el nombre de tu base de datos que sabes que apareció en la cadena de conexión para verificar si hay rezagados, no debería haber ninguno.

Cuestiones relacionadas