Относительная ссылка на путь в WebConfig.ConnectionString - PullRequest
14 голосов
/ 24 сентября 2008

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

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

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

Ответы [ 4 ]

15 голосов
/ 26 марта 2010

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

Я выбрал следующий способ:

В 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);  
10 голосов
/ 24 сентября 2008

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

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

Из сетевой документации MSDN:

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

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

1 голос
/ 12 апреля 2011

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

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

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

0 голосов
/ 24 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...