Относительная ссылка пути в WebConfig.ConnectionString
Можно ли указать ссылку относительного пути в connectionstring, свойство attachDbFileName в файле web.config?
Например, в моей базе данных находится папка App_data, я могу легко указать AttachDBFilename как | DataDirectory |\mydb.mdf и | Datadirectory | автоматически разрешит правильный путь.
Теперь предположим, что файл web.config находится в папке A, но база данных находится в папке B\App_data, где папка A и B находится в той же папке. Нужно ли использовать ссылку относительного пути для разрешения правильного пути?
Ответы
Ответ 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.SetDatastrong > .
В онлайн-документации 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 вы также можете создать виртуальный каталог, который указывает, где хранится реальная база данных. Тогда ваша строка подключения просто ссылается на виртуальный каталог.