ADO.NET |DataDirectory| где это задокументировано?
В AppConfig можно использовать |DataDirectory|
но я не могу найти документ?
6 ответов
|DataDirectory|
является строкой подстановки, поэтому вы можете настроить расположение файла базы данных отдельно.
Так что вместо:
SqlConnection c = new SqlConnection (
@"Data Source=.\SQLDB; AttachDbFilename=C:\MyDB\Database.mdf;Initial Catalog=Master");
вы делаете следующее:
// 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");
На социальных форумах MSDN этот ответ можно найти
|DataDirectory| (заключенный в символы канала) является строкой подстановки, которая указывает путь к базе данных. Это устраняет необходимость жестко кодировать полный путь, что приводит к нескольким проблемам, поскольку полный путь к базе данных может быть сериализован в разных местах. DataDirectory также облегчает совместное использование проекта, а также развертывание приложения.
Например, вместо следующей строки подключения:
"Data Source= c:\program files\MyApp\Mydb.sdf"
Используя DataDirectory, вы можете иметь следующую строку подключения:
“Data Source = |DataDirectory|\Mydb.sdf”
Чтобы установить свойство DataDirectory, вызовите метод AppDomain.SetData. Если вы не установите свойство DataDirectory, для доступа к папке базы данных будут применяться следующие правила по умолчанию:
- Для приложений, которые помещены в папку на компьютере пользователя, папка базы данных использует папку приложения.
- Для приложений, работающих в ClickOnce, в папке базы данных используется созданная папка данных.
Неправильные ребята! |DataDirectory| ссылается на каталог mssql\data, для которого настроен ваш экземпляр.
Так, например, я использую Visual Studio 2012 в сочетании с SQL Express. |DataDirectory| помещает все MDF-файлы в C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA, где был установлен мой sql express, а не в папку "Мои решения" app_data.
Также файл имеет имена MVCMovie.Models.MovieDBContext, а не Movies.mdf, как указано в моем файле web.config.
Я думаю, что он должен быть настроен где-то в Visual Studio для его надлежащего размещения в app_data.
Существует внутренний класс с именем SqlConnectionHelper, который анализирует это и создает MDF, если это необходимо.
Вот единственный документ MS, который я могу найти об этом классе и |DataDirectory| макрос: http://msdn.microsoft.com/en-us/library/aa478948.aspx.
http://msdn.microsoft.com/en-us/library/aa478948.aspx
|DataDirectory| Часть строки подключения указывает, что файл MDF находится в каталоге App_Data.
Это может быть актуально, если вы используете код первой миграции.
В VisualStudio 2013 (по крайней мере) при выполнении команды Update-Database каталог данных является относительным из "Startup Project", настроенного в настоящее время в Visual Studio.
Даже если вы запустите Update-Database в другом проекте (выбранном на консоли диспетчера пакетов), он создаст вашу базу данных на App_Data выбранного в данный момент Startup Project.