SQL 服务器数据库在测试中保持设置 SINGLE_USER
SQL Server database keeps setting SINGLE_USER on in tests
我有 2 个 docker 容器,它们托管自己的服务器。我还有一个托管 SQL 服务器数据库的第三个 docker 容器。每个服务器访问这个数据库。
我的数据库 docker 容器在 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=******;
当我 运行 我的测试时,我从数据库的 docker 容器中得到一个日志,说它正在设置 SINGLE_USER 模式。这显然破坏了我的测试,因为两台服务器都必须访问它。
我尝试使用数据库浏览器来设置 MULTI_USER 并在其上工作...直到测试开始...然后测试套件中的数据库或其他东西将其切换回 SINGLE_USER。
我如何通过 docker 撰写、docker 文件或任何其他方式配置它以不将 SINGLE_USER 模式设置为打开或专门将 MULTI_USER 模式设置为打开?
以防万一:我还使用 Selenium 进行测试,使用 circleci 进行测试自动化。
在搜索代码库后,我发现它实际上与配置无关。我正在使用 Entity Framework 并且单元测试在每次测试后删除并重新迁移了数据库。调用 migrate 命令将数据库置于 SINGLE_USER 模式。当我出于好奇删除迁移调用时发现了这一点,瞧瞧,没有设置 SINGLE_USER 模式。
我假设迁移调用 (myDbContext.Database.Migrate()
) 设置了模式,以便将其他侦听器踢出,以免在迁移过程中引起冲突。但这只是一个猜测。我在网上找不到真正的答案。
简而言之,解决方案是代码库设置 SINGLE_USER 模式,我只需要找到调用即可。
我有 2 个 docker 容器,它们托管自己的服务器。我还有一个托管 SQL 服务器数据库的第三个 docker 容器。每个服务器访问这个数据库。
我的数据库 docker 容器在 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=******;
当我 运行 我的测试时,我从数据库的 docker 容器中得到一个日志,说它正在设置 SINGLE_USER 模式。这显然破坏了我的测试,因为两台服务器都必须访问它。
我尝试使用数据库浏览器来设置 MULTI_USER 并在其上工作...直到测试开始...然后测试套件中的数据库或其他东西将其切换回 SINGLE_USER。
我如何通过 docker 撰写、docker 文件或任何其他方式配置它以不将 SINGLE_USER 模式设置为打开或专门将 MULTI_USER 模式设置为打开?
以防万一:我还使用 Selenium 进行测试,使用 circleci 进行测试自动化。
在搜索代码库后,我发现它实际上与配置无关。我正在使用 Entity Framework 并且单元测试在每次测试后删除并重新迁移了数据库。调用 migrate 命令将数据库置于 SINGLE_USER 模式。当我出于好奇删除迁移调用时发现了这一点,瞧瞧,没有设置 SINGLE_USER 模式。
我假设迁移调用 (myDbContext.Database.Migrate()
) 设置了模式,以便将其他侦听器踢出,以免在迁移过程中引起冲突。但这只是一个猜测。我在网上找不到真正的答案。
简而言之,解决方案是代码库设置 SINGLE_USER 模式,我只需要找到调用即可。