下午好,您能告诉我如何解决此问题吗?
System.InvalidOperationException:无法跟踪实体类型'Profile'的实例,因为已经跟踪了另一个具有相同'{'Id'}键值的实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。考虑使用'DbContextOptionsBuilder.EnableSensitiveDataLogging'查看冲突的键值。
我正在使用Entity Framework,现在正在测试存储库中的删除方法
[Fact]
public async void DeleteTest()
{
//WHEN
await repository.Create(new Profile{Id = 7, Login = "nunc", Name = "Leilani", LastName = "Pena"});
await repository.Delete(7);
Profile profile = await repository.GetById(7);
//THEN
Assert.True(profile == null);
}
现在,我的内存中只有一个ID = 7,这是数据库,但最后我收到了InvalidOperationException异常。我尝试将DbContextCreator.GetDbContext().Database.EnsureDeleted();
行添加到我的Test Class的构造函数中(我正在使用XUnit),但这并没有帮助我。
这是我的DbContextCreator
public class DbContextCreator
{
private static ShortyContext context;
public static ShortyContext GetDbContext()
{
if(context == null)
{
var optionsBuilder = new DbContextOptionsBuilder<ShortyContext>();
optionsBuilder.UseInMemoryDatabase(databaseName : "shorty_test");
context = new ShortyContext(optionsBuilder.Options);
}
return context;
}
}