[EF] Utilizar el ConnectionString de mi modelo Entity Framework

Trabajando con Federico necesitamos realizar consultas a la DB “dinámicamente” para rellenar reportes con Report Server embebido en nuestras aplicaciones web.
Para eso utilizamos Procedimientos Almacenados, y como queremos que sea lo mas “genérico posible”, obtenemos el nombre del reporte (ya sea por un campo de la DB o armándolo con alguna política de nombres teniendo en cuenta el del reporte).

Como sabemos la Cadena de Conexión de Entity Framework esta compuesta por la cadena, path de archivos del modelo y de asignación. Por ejemplo…

<connectionStrings>
    <add name="AdventureWorksEntities" 
         connectionString="metadata=.\AdventureWorks.csdl|.\AdventureWorks.ssdl|.\AdventureWorks.msl;
         provider=System.Data.SqlClient;provider connection string='Data Source=localhost;
         Initial Catalog=AdventureWorks;Integrated Security=True;Connection Timeout=60;
         multipleactiveresultsets=true'" providerName="System.Data.EntityClient" />
</connectionStrings>

Para armar nuestro Comando ADO.NET “puro y simple” (y genérico para llenar nuestros reportes) necesitamos la Conexión y para ello una cadena… y no queríamos:

  • Tener una cadena por separado (la tentación y fuerte!)
  • Parsear la cadena de conexión de EF (para obtener la parte que necesitamos)

 

Entonces solo basta una lectura rápida de las propiedades de la conexión en este caso nos valemos de la propiedad StoreConnection del EntityConnection

Textual de MSDN:

(…)Proporciona acceso a la conexión de origen de datos subyacente usada por el objeto EntityConnection.(…)

 

Podríamos entonces tener una propiedad estática que nos ayude:

public static string ConnectionString
{
    get
    {
        using ( AdventureWorksEntities contexto = new AdventureWorksEntities())
        {
            string cadenaCon = 
                    ((System.Data.EntityClient.EntityConnection)contexto.Connection).StoreConnection.ConnectionString;
            return cadenaCon;
            }
    

    }
}
 

 

Enlaces

Crossposting desde mi blog en Geeks.ms: http://geeks.ms/blogs/fernandezja

Published 11-08-2011 8:56 por Jose A. Fernandez