Подтвердить что ты не робот

Относительная ссылка пути в WebConfig.ConnectionString

Можно ли указать ссылку относительного пути в connectionstring, свойство attachDbFileName в файле web.config?

Например, в моей базе данных находится папка App_data, я могу легко указать AttachDBFilename как | DataDirectory |\mydb.mdf и | Datadirectory | автоматически разрешит правильный путь.

Теперь предположим, что файл web.config находится в папке A, но база данных находится в папке B\App_data, где папка A и B находится в той же папке. Нужно ли использовать ссылку относительного пути для разрешения правильного пути?

4b9b3361

Ответ 1

У меня была такая же проблема со следующим сценарием: я хотел использовать ту же базу данных, что и приложение, из моих тестов интеграции.

Я пошел со следующим обходным путем:

В App.config моего тестового проекта у меня есть:

<appSettings>
  <add key="DataDirectory" value="..\..\..\BookShop\App_Data\"/>
</appSettings>

В тестовой настройке я выполняю следующий код:

   var dataDirectory = ConfigurationManager.AppSettings["DataDirectory"];  
   var absoluteDataDirectory = Path.GetFullPath(dataDirectory);  
   AppDomain.CurrentDomain.SetData("DataDirectory", absoluteDataDirectory);  

Ответ 2

Это зависит от того, где находится ваш 'DataDirectory' расположен. Если разрешенное значение '| DataDirectory' находится в папке A (где находится файл web.config), затем нет - вы не можете указать относительный путь, который не является подпапкой разрешенного значения '| DataDirectory |'.

Что вы можете сделать, это установить значение '| DataDirectory |' чтобы быть где угодно, вызывая метод AppDomain.SetData​​strong > .

В онлайн-документации MSDN:

Когда используется DataDirectory, результирующий путь к файлу не может быть выше в структуре каталогов, чем каталог, на который указывает строка подстановки. Например, если полностью расширенный DataDirectory - это C:\AppDirectory\app_data, то примерная строка соединения, показанная выше, работает, потому что она ниже c:\AppDirectory. Однако попытка указать DataDirectory as | DataDirectory |..\data приведет к ошибке, потому что \data не является подкаталогом \AppDirectory.

Надеюсь, что это поможет.

Ответ 3

Добавьте к методу тестирования следующие атрибуты:

[DeploymentItem("..\\TestSolutionDir\\TestProjedtDir\\TestDataFolder\\TestAutomationSpreadsheet.xlsx")]
[DataSource("System.Data.Odbc", "Dsn=Excel Files;dbq=|DataDirectory|\\TestAutomationSpreadsheet.xlsx", "SpreadsheetTabName$", DataAccessMethod.Sequential)]

Переменная |DataDirctory| определяется системой при выполнении теста. Модуль DeploymentItem копирует таблицу там. Вы указываете на таблицу и на вкладку в электронной таблице, откуда поступают данные. Щелкните правой кнопкой мыши на вкладке, чтобы переименовать ее во что-то легко запоминающееся.

Ответ 4

В IIS вы также можете создать виртуальный каталог, который указывает, где хранится реальная база данных. Тогда ваша строка подключения просто ссылается на виртуальный каталог.