Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL数据库并行集成测试_C#_Asp.net_Entity Framework_Xunit - Fatal编程技术网

C# SQL数据库并行集成测试

C# SQL数据库并行集成测试,c#,asp.net,entity-framework,xunit,C#,Asp.net,Entity Framework,Xunit,想要的结果:与实体框架并行运行集成测试,实体框架配置为使用某种强制约束的数据库 当前情况:我有一个带有一些集成测试的项目,我指的是用WebApplicationFactory设置的测试。目前,我使用它与EF核心设置使用内存数据库 protected override void ConfigureWebHost(IWebHostBuilder builder) { ConfigureWebHostBuilder(builder);

想要的结果:与实体框架并行运行集成测试,实体框架配置为使用某种强制约束的数据库

当前情况:我有一个带有一些集成测试的项目,我指的是用
WebApplicationFactory
设置的测试。目前,我使用它与EF核心设置使用内存数据库

 protected override void ConfigureWebHost(IWebHostBuilder builder)
        {
            ConfigureWebHostBuilder(builder);
            builder.ConfigureTestServices(services =>
            {
                var serviceProvider = new ServiceCollection()
                    .AddEntityFrameworkInMemoryDatabase()
                    .BuildServiceProvider();

                services.AddDbContext<AppDbContext>(options => 
                {
                    options.UseInMemoryDatabase("testDb");
                    options.UseInternalServiceProvider(serviceProvider);
                    options.EnableDetailedErrors();
                    options.EnableSensitiveDataLogging();
                });
            });
        }
受保护的覆盖无效配置WebHost(IWebHostBuilder)
{
配置WebHostBuilder(构建器);
builder.ConfigureTestServices(服务=>
{
var serviceProvider=newservicecolection()
.AddEntityFrameworkInMemoryDatabase()
.BuildServiceProvider();
services.AddDbContext(选项=>
{
选项。使用MemoryDatabase(“testDb”);
选项。使用InternalServiceProvider(serviceProvider);
options.EnableDetailedErrors();
options.EnableSensitiveDataLogging();
});
});
}
虽然这是可行的,但问题是它没有强制执行SQL查询,我已经在多个案例中运行过,集成测试显示该功能可以工作,但是当尝试在实际项目运行时重新生成该功能并将EF连接到SQL Server数据库时,该功能由于某些失败的数据库约束而失败

想法:

  • 起初我想到在内存数据库中使用SQLite。不起作用,我认为这是并发性问题,因为在每个测试用例开始时,我都会使用
    .EnsureDeleted()
    .EnsureCreated()
    .Migrate()
  • 然后使用带有随机名称的文件创建SQLite。不起作用,因为我无法清除内部DbContext缓存。我确信文件是重新创建和清理的,但DbContext只是有缓存的实体
  • 最后,在我发布了一些迁移之后,我可能根本无法使用SQLite,因为它不支持很多迁移类型(删除FK、更改列等)/