База данных SQL Server продолжает устанавливать SINGLE_USER в тестах
У меня есть 2 док-контейнера, которые размещают свой собственный сервер. У меня также есть третий докер-контейнер, в котором размещается база данных SQL Server. Каждый сервер обращается к этой базе данных.
Мой док-контейнер БД настроен так же, как в docker-compose.yml:
my-db:
image: microsoft/mssql-server-linux:latest
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=******
ports:
- "1433:1433"
Каждая строка подключения серверов (они являются.NET-серверами)
ConnectionStrings__Default=data source=my-db;initial catalog=TestDb;persist security info=True;user id=SA;password=******;
Когда я запускаю свои тесты, я получаю журнал из контейнера докера для БД, в котором говорится, что он устанавливает режим SINGLE_USER. Это явно нарушает мои тесты, потому что оба сервера должны получить к нему доступ.
Я попытался использовать браузер БД, чтобы установить MULTI_USER, на котором работал... пока тесты не начались... Затем БД или что-то в наборе тестов переключило его обратно на SINGLE_USER.
Как мне настроить это с помощью docker compose, dockerfiles или чего-либо еще, чтобы НЕ включать режим SINGLE_USER или специально включать режим MULTI_USER?
В случае, если это имеет значение: я также использую Selenium для тестов и circleci для автоматизации тестов.
1 ответ
После изучения базы кода я обнаружил, что она на самом деле не имеет ничего общего с конфигурацией. Я использую Entity Framework, и после каждого теста модульные тесты удалялись и обновлялись в базе данных. Вызов команды migrate переводит базу данных в режим SINGLE_USER. Я узнал об этом, когда из любопытства удалил вызов migrate, и вот, режим SINGLE_USER не был установлен.
Я предполагаю мигрировать вызов (myDbContext.Database.Migrate()
) устанавливает режим так, чтобы он выгонял других слушателей, чтобы не вызывать конфликты в середине миграций. Но это только предположение. Я не мог найти верный ответ о том, почему онлайн.
Короче говоря, решение этой проблемы состоит в том, что кодовая база настраивала режим SINGLE_USER, мне просто нужно было найти вызов.