使用EF框架测试删除方法

时间:2018-08-15 10:58:40

标签: database entity-framework unit-testing

下午好,您能告诉我如何解决此问题吗?

  

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;
    }
}

0 个答案:

没有答案