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.

Другие вопросы по тегам