ADO.NET | DataDirectory | где это задокументировано? - PullRequest
60 голосов
/ 11 сентября 2009

В AppConfig можно использовать |DataDirectory|, но я не могу найти какой-либо документ?

Ответы [ 6 ]

77 голосов
/ 11 сентября 2009

|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");
15 голосов
/ 11 сентября 2009

На социальных форумах MSDN этот ответ можно найти

| DataDirectory | (заключенный в символы канала) является строкой подстановки, которая указывает путь к базе данных. Это избавляет от необходимости жестко кодировать полный путь, что приводит к нескольким проблемам, поскольку полный путь к базе данных может быть сериализован в разных местах. DataDirectory также облегчает совместное использование проекта, а также развертывание приложения.

Например, вместо следующей строки подключения:

"Data Source= c:\program files\MyApp\Mydb.sdf"

Используя DataDirectory, вы можете иметь следующую строку подключения:

“Data Source = |DataDirectory|\Mydb.sdf”

Чтобы установить свойство DataDirectory, вызовите метод AppDomain.SetData. Если вы не установите свойство DataDirectory, для доступа к папке базы данных будут применяться следующие правила по умолчанию:

  • Для приложений, помещаемых в папку на компьютере пользователя, в папке базы данных используется папка приложения.
  • Для приложений, работающих в ClickOnce, в папке базы данных используется созданная папка данных.
8 голосов
/ 16 апреля 2013

Неправильные ребята! | 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.

4 голосов
/ 14 июня 2012

http://msdn.microsoft.com/en-us/library/aa478948.aspx

| DataDirectory | часть строки подключения указывает, что файл MDF находится в каталоге App_Data.

4 голосов
/ 11 сентября 2009

Существует внутренний класс с именем SqlConnectionHelper, который анализирует это и при необходимости создает MDF.

Вот единственный документ MS, который я могу найти об этом классе и | DataDirectory | макрос: http://msdn.microsoft.com/en-us/library/aa478948.aspx.

3 голосов
/ 08 июля 2014

Это может быть актуально, если вы используете код первой миграции.

С VisualStudio 2013 (по крайней мере) при выполнении команды Update-Database каталог данных является относительным из «Startup Project», настроенного в настоящее время в Visual Studio.

Даже если вы запустите Update-Database в другом проекте (как выбрано на консоли диспетчера пакетов), он создаст вашу базу данных на App_Data выбранного в данный момент Startup Project.

...