2011-01-05 12 views
7

Estoy usando la plantilla posted in this thread para generar enums C# de un par de tablas de búsqueda en SQL Server dentro de una biblioteca de clases que contiene mi DAL.T4 Plantillas y cadenas de conexión en una biblioteca de clases

En este momento, tengo la cadena de conexión utilizada por las plantillas incrustadas y una plantilla incluye el archivo en la biblioteca de la clase. ¿Hay una manera conveniente de que la plantilla tome la cadena de conexión del web.config del proyecto principal (WAP) sin tener que incluir una ruta física? ¿O hay una mejor manera de abordar esto?

Editar

También he considerado la creación de un conjunto de CLR SQL que devuelve una función de valor de tabla que contiene los contenidos de enumeración (que luego se definen en C#, no en la base de datos), pero I' No estoy seguro de cuál será el rendimiento. Si es significativo o no, obviamente dependerá de la aplicación, pero odiaría cargar un camino de mierda si se trata de un enfoque mejor conocido: evitar este enfoque.

Respuesta

10

He utilizado el siguiente enfoque para la lectura de la web.config al ejecutar la plantilla T4

<# var path = Host.ResolvePath(@"..\..\www"); #> 

donde ..\..\www es la ruta relativa al directorio donde mi web.config se encuentra en relación a donde se está ejecutando mi plantilla T4

var config = ConfigurationManager.OpenMappedExeConfiguration(
    new ExeConfigurationFileMap { ExeConfigFilename = location [email protected]"\web.config" }, 
    ConfigurationUserLevel.None); 

var connStrings = config.ConnectionStrings; 
+0

Tenía la esperanza de no tener que tener rutas de código duro de ningún tipo, pero parece que eso no va a suceder. Gracias. –

+3

por supuesto, necesita decirle a la plantilla cómo se encuentra en relación con su configuración, pero eso no se considera hardcoding ... puede mover su solución tan loca como desee, siempre y cuando la ubicación relativa entre los proyectos sea la misma que lo hará seguirá funcionando. –

Cuestiones relacionadas