SQL Server数据库在测试中始终将SINGLE_USER设置为on

时间:2019-06-18 15:25:09

标签: sql-server docker circleci single-user

我有2个托管各自服务器的docker容器。我还有一个托管SQL Server数据库的第三个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容器获取了DB的日志,该日志表明已将SINGLE_USER模式设置为on。这显然破坏了我的测试,因为两个服务器都必须访问它。

我尝试使用数据库浏览器将MULTI_USER设置为可运行...直到测试开始...然后,数据库或测试套件中的某些内容将其切换回SINGLE_USER。

我该如何通过docker compose,dockerfiles或其他任何东西来配置它,以不将SINGLE_USER模式设置为开或将MULTI_USER模式设置为开?

如果有问题的话:我还将Selenium用于测试,将Circleci用于测试自动化。

1 个答案:

答案 0 :(得分:0)

在仔细检查了代码库之后,我发现它实际上与配置无关。我正在使用Entity Framework,并且在每次测试后删除单元测试并重新迁移数据库。调用migration命令会将数据库置于SINGLE_USER模式。当我出于好奇而删除迁移调用时发现了这一点,瞧瞧,没有设置SINGLE_USER模式。

我假设迁移调用(myDbContext.Database.Migrate())设置了模式,以便将其他侦听器踢出,以免在迁移过程中引起冲突。但这只是一个猜测。我找不到关于为什么上网的真正答案。

简而言之,解决方案是代码库设置了SINGLE_USER模式,我只需要找到调用即可。