c# - how - Referencia de ruta relativa en WebConfig.ConnectionString
sql c# tutorial (4)
¿Es posible especificar una referencia de ruta relativa en la propiedad connectionstring, attachDbFileName en un web.config?
Por ejemplo, en mi base de datos se encuentra en la carpeta App_data, puedo especificar fácilmente AttachDBFilename como | DataDirectory | / mydb.mdf y | Datadirectory | se resolverá automáticamente en la ruta correcta.
Ahora, supongamos que el archivo web.config se encuentra en la carpeta A, pero la base de datos se encuentra en la carpeta B / App_data, donde las carpetas A y B se encuentran en la misma carpeta. ¿Hay alguna forma de utilizar la referencia de ruta relativa para resolver la ruta correcta?
Depende de dónde está tu ''| DataDirectory |'' se encuentra. Si el valor resuelto de ''| DataDirectory |'' está en la carpeta A (donde está el web.config), entonces no; no puede especificar una ruta relativa que no sea una subcarpeta del valor resuelto de ''| DataDirectory |''.
Lo que puede hacer es establecer el valor de ''| DataDirectory |'' para estar donde quieras, llamando al método AppDomain.SetData .
De la documentación en línea de MSDN:
Cuando se usa DataDirectory, la ruta del archivo resultante no puede ser más alta en la estructura del directorio que el directorio al que apunta la cadena de sustitución. Por ejemplo, si el DataDirectory completamente expandido es C: / AppDirectory / app_data, entonces la cadena de conexión de muestra que se muestra arriba funciona porque está debajo de c: / AppDirectory. Sin embargo, intentar especificar DataDirectory como | DataDirectory | .. / data dará como resultado un error porque / data no es un subdirectorio de / AppDirectory.
Espero que esto ayude.
En IIS también podría crear un directorio virtual que apunte a donde se encuentre la base de datos real. Entonces su cadena de conexión solo hace referencia al directorio virtual.
Tuve el mismo problema con la siguiente situación: quería usar la misma base de datos que la aplicación de mis pruebas de integración.
Fui con la siguiente solución:
En el App.config de mi prueba-proyecto tengo:
<appSettings>
<add key="DataDirectory" value="../../../BookShop/App_Data/"/>
</appSettings>
En la configuración de prueba, ejecuto el siguiente código:
var dataDirectory = ConfigurationManager.AppSettings["DataDirectory"];
var absoluteDataDirectory = Path.GetFullPath(dataDirectory);
AppDomain.CurrentDomain.SetData("DataDirectory", absoluteDataDirectory);
Agregue los siguientes atributos al método de prueba:
[DeploymentItem("..//TestSolutionDir//TestProjedtDir//TestDataFolder//TestAutomationSpreadsheet.xlsx")]
[DataSource("System.Data.Odbc", "Dsn=Excel Files;dbq=|DataDirectory|//TestAutomationSpreadsheet.xlsx", "SpreadsheetTabName$", DataAccessMethod.Sequential)]
The |DataDirctory|
variable es definida por el sistema cuando ejecuta la prueba. DeploymentItem copia la hoja de cálculo allí. Señala la hoja de cálculo y la pestaña dentro de la hoja de cálculo de donde provienen los datos. Haga clic derecho en la pestaña para cambiarle el nombre a algo fácil de recordar.