Временно прикрепить/подключиться к файлу SQL Server LocalDB

Я пытаюсь программно создать и подключиться к базе данных LocalDB для конкретного приложения. Я хотел бы сделать это, указав только имя файла .MDF, в идеале не указывая имя экземпляра или имя базы данных, которая регистрируется где-либо.

Доступ к базе данных осуществляется из некоторых модульных тестов, поэтому она будет использоваться только в течение короткого времени, прежде чем будет удалена. Мой текущий подход создает файл .MDF правильно, но также регистрирует имя с экземпляром по умолчанию, которого я хотел бы избежать, учитывая временный и «неодноэлементный» характер экземпляров базы данных.

Возможно ли сделать то, что я пытаюсь сделать, или я неправильно понял, как работает LocalDB?


person Stephen Hewlett    schedule 03.11.2014    source источник


Ответы (2)


Автоматический экземпляр LocalDB с определенным файлом данных

Server=(localdb)\v11.0;Integrated Security=true;
AttachDbFileName=C:\MyFolder\MyData.mdf;

Обновить

Это можно использовать с областью развертывания в вашем файле .testsettings. Вам просто нужно установить флажок «Включить развертывание» и добавить файлы .mdf и .ldf в «Дополнительные файлы и каталоги для развертывания».

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

person chrisb    schedule 03.11.2014

Ответ Chrisb помог мне решить эту проблему, но я заметил, что база данных оставалась подключенной к экземпляру по умолчанию в LocalDB даже после того, как соединение было закрыто. Я читал, что в конечном итоге это может быть очищено через несколько минут, но в моем случае это было слишком долго, поскольку файл находился во временном каталоге, используемом MSTest, и его нужно было вовремя закрыть для очистки в конце тестового запуска.

Решение состояло в том, чтобы использовать строку подключения, аналогичную https://stackoverflow.com/a/26712648, и процесс отсоединения, аналогичный https://stackoverflow.com/a/6646319 сразу после того, как я закончил использовать соединение.

Создание файла MDF в первую очередь может быть выполнено путем подключения к автоматическому экземпляру LocalDB, выполнения CREATE DATABASE и последующего использования того же метода отсоединения. Используя имя файла для имени базы данных, которое разрешено в LocalDB из-за разрешенных гораздо более длинных имен, я вне всякого разумного сомнения гарантировал, что имя базы данных не будет конфликтовать ни с чем другим на компьютере даже в течение короткого периода времени, когда оно остается подключенным.

person Stephen Hewlett    schedule 03.11.2014
comment
Я обновил свой ответ пропущенным предположением: использование файлов .testsettings и развертывание означает, что вам не нужно беспокоиться об отсоединении и т. д. У вас есть главный файл .mdf/.ldf, находящийся в папке ресурсов, и тестовый движок обрабатывает его копирование при выполнении ваших модульных тестов. - person chrisb; 03.11.2014
comment
Я работаю в VSCode. sp_detach_db, упомянутое в вашей ссылке, у меня не сработало. Универсальный способ вроде бы psexec sqllocaldb.exe stop <db_to_release_mdf_now> - person Ben; 07.06.2020