c# - app - attachdbfilename
ADO.NET | DataDirectory | ¿Dónde está esto documentado? (6)
En AppConfig es posible usar |DataDirectory|
pero no puedo encontrar ningún documento?
¡Muchachos incorrectos! The | DataDirectory | hace referencia al directorio mssql / data para el que está configurada su instancia.
Entonces, por ejemplo, estoy usando Visual Studio 2012 inconjunction con SQL Express. | DataDirectory | coloca todos los archivos MDF en C: / Archivos de programa / Microsoft SQL Server / MSSQL10_50.SQLEXPRESS / MSSQL / DATA donde se instaló mi sql express, no en mi carpeta de soluciones app_data.
También el archivo se llama MVCMovie.Models.MovieDBContext no Movies.mdf como se especifica en mi web.config.
Estoy pensando que debe configurarse en algún lugar de Visual Studio para que se coloque adecuadamente en app_data.
En los foros sociales de MSDN se puede encontrar this respuesta
| DataDirectory | (encerrado en símbolos de tubería) es una cadena de sustitución que indica la ruta a la base de datos. Elimina la necesidad de codificar la ruta completa, lo que genera varios problemas ya que la ruta completa a la base de datos se puede serializar en diferentes lugares. DataDirectory también facilita compartir un proyecto y también implementar una aplicación.
Por ejemplo, en lugar de tener la siguiente cadena de conexión:
"Data Source= c:/program files/MyApp/Mydb.sdf"
Usando DataDirectory, puede tener la siguiente cadena de conexión:
“Data Source = |DataDirectory|/Mydb.sdf”
Para establecer la propiedad DataDirectory, llame al método AppDomain.SetData. Si no establece la propiedad DataDirectory, se aplicarán las siguientes reglas predeterminadas para acceder a la carpeta de la base de datos:
- Para las aplicaciones que se colocan en una carpeta en la computadora del usuario, la carpeta de la base de datos usa la carpeta de la aplicación.
- Para las aplicaciones que se ejecutan en ClickOnce, la carpeta de la base de datos utiliza la carpeta de datos específica que se crea.
Esto podría ser relevante si está utilizando primeras migraciones de código.
Con VisualStudio 2013 (al menos) al ejecutar un comando Actualizar-Base de datos, el directorio de datos es relativo desde el "Proyecto de inicio" actualmente configurado en Visual Studio.
Incluso si ejecuta la base de datos de actualización en otro proyecto (como se seleccionó en la consola de Package Manager), creará su base de datos en el App_Data del proyecto de inicio actualmente seleccionado.
Hay una clase interna llamada SqlConnectionHelper que analiza esto y crea el MDF si es necesario.
Aquí está el único documento MS que puedo encontrar sobre esa clase y | DataDirectory | macro: http://msdn.microsoft.com/en-us/library/aa478948.aspx .
http://msdn.microsoft.com/en-us/library/aa478948.aspx
The | DataDirectory | una parte de la cadena de conexión especifica que el archivo MDF está ubicado en el directorio App_Data.
|DataDirectory|
es una cadena de sustitución para que pueda configurar la ubicación de su archivo de base de datos por separado.
Entonces, en lugar de:
SqlConnection c = new SqlConnection (
@"Data Source=./SQLDB; AttachDbFilename=C:/MyDB/Database.mdf;Initial Catalog=Master");
haces lo siguiente:
// Set |DataDirectory| value
AppDomain.CurrentDomain.SetData("DataDirectory", "C:/myDB");
// SQL Connection String with |DataDirectory| substitution string
SqlConnection c = new SqlConnection (
@"Data Source=./SQLDB; AttachDbFilename=|DataDirectory|/Database.mdf;Initial Catalog=Master");