База данных 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, мне просто нужно было найти вызов.

Другие вопросы по тегам