Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 同时运行的测试失败,并显示“失败”;实体类型的实例。。。“无法跟踪”;_C#_Entity Framework_Unit Testing_In Memory Database - Fatal编程技术网

C# 同时运行的测试失败,并显示“失败”;实体类型的实例。。。“无法跟踪”;

C# 同时运行的测试失败,并显示“失败”;实体类型的实例。。。“无法跟踪”;,c#,entity-framework,unit-testing,in-memory-database,C#,Entity Framework,Unit Testing,In Memory Database,我正在asp.net core 2.0项目上运行一些单元测试,使用EF core和内存数据库 我创建的数据库如下所示: var serviceProvider = new ServiceCollection() .AddEntityFrameworkInMemoryDatabase() .BuildServiceProvider(); var builder = new DbContextOptionsBuilder<TDatabaseContext>

我正在asp.net core 2.0项目上运行一些单元测试,使用EF core和内存数据库

我创建的数据库如下所示:

var serviceProvider = new ServiceCollection()
        .AddEntityFrameworkInMemoryDatabase()
        .BuildServiceProvider();
var builder = new DbContextOptionsBuilder<TDatabaseContext>();
builder.UseInMemoryDatabase(Guid.NewGuid().ToString())
    .UseInternalServiceProvider(serviceProvider)
    .EnableSensitiveDataLogging();
var context = new MyDatabaseContext(builder.Options);
var serviceProvider=new servicecolection()
.AddEntityFrameworkInMemoryDatabase()
.BuildServiceProvider();
var builder=new DbContextOptionsBuilder();
builder.UseInMemoryDatabase(Guid.NewGuid().ToString())
.UseInternalServiceProvider(serviceProvider)
.EnableSensitiveDataLogging();
var context=newmydatabasecontext(builder.Options);
根据,使用单独的服务提供者并为每个内存中的DB实例使用不同的名称应该确保每个测试都有自己的数据库,而不是与其他测试共享

但是,当我单独运行测试时,测试运行良好,但如果同时运行测试,则测试失败,错误如下:

var serviceProvider = new ServiceCollection()
        .AddEntityFrameworkInMemoryDatabase()
        .BuildServiceProvider();
var builder = new DbContextOptionsBuilder<TDatabaseContext>();
builder.UseInMemoryDatabase(Guid.NewGuid().ToString())
    .UseInternalServiceProvider(serviceProvider)
    .EnableSensitiveDataLogging();
var context = new MyDatabaseContext(builder.Options);
System.InvalidOperationException:无法跟踪实体类型“SomeModelObject”的实例,因为已跟踪键值为“Id:1”的另一个实例。附着现有实体时,请确保仅附着一个具有给定键值的实体实例


我还应该做些什么来确保DB上下文不会在不同的测试之间共享?

你能展示一下示例测试吗?我试图创建一个简单的项目来重现这个问题,但我失败了。。。这种行为似乎非常不稳定,这是一个简单的测试,显示了设置是如何完成的以及测试是如何工作的,可能会有所帮助。我认为不需要整个项目。我不想发布整个项目,但问题是简单的测试不存在问题:/所以测试中肯定有其他错误,而不是您显示的设置。设置应该可以工作。