使用不同的InMemory数据库仍然可以增加身份

时间:2018-09-12 10:00:39

标签: c# entity-framework-core

我正在设置测试框架,以针对不同情况使用内存数据库。每个测试使用一个“唯一”数据库,并且测试的每个步骤都使用不同的上下文作为实体框架。

问题是,即使测试使用不同的“内存”数据库以及实体框架的不同上下文,数据库中的身份似乎也会增加。

例如,我有2个单元测试:

[Test]
public async Task CanGetAllFromRepository()
{
    var options = new DbContextOptionsBuilder<MyContext>()
        .UseInMemoryDatabase(databaseName: "CanGetAllFromRepository").Options;
    var testa = new User();
    var testb = new User();
    var testc = new User();

    using (var context = new MyContext(options))
    {
        await context.Users.AddAsync(testa);
        await context.Users.AddAsync(testb);
        await context.Users.AddAsync(testc);
        await context.SaveChangesAsync();
    }

    using (var context = new MyContext(options))
    {
        var repo = new UserRepository(context);
        var all = await repo.GetAllAsync();
        Assert.IsTrue(all.Count == 3);
    }
}

[Test]
public async Task CanGetByIdFromRepository()
{
    var options = new DbContextOptionsBuilder<MyContext>()
        .UseInMemoryDatabase(databaseName: "CanGetByIdFromRepository").Options;
    var testa = new User();
    var testb = new User();
    var testc = new User();

    using (var context = new SalesPortalContext(options))
    {
        await context.User.AddAsync(testa);
        await context.User.AddAsync(testb);
        await context.User.AddAsync(testc);
        await context.SaveChangesAsync();
    }

    using (var context = new MyContext(options))
    {
        var repo = new UserRepository(context);
        var usera = await repo.GetByIdAsync(1);
        var userb = await repo.GetByIdAsync(2);
        var userc = await repo.GetByIdAsync(3);

        Assert.IsNotNull(usera);
        Assert.IsNotNull(userb);
        Assert.IsNotNull(userc);
    }
}

如果我按1对1进行测试,那不是问题,而是一起运行;然后对于第二个单元测试,用户的标识集ID开始为4、5、6。(单独运行时,其ID分别为1、2、3)。

更新

我设法通过手动为用户分配其ID来解决此问题,例如:

var testa = new User() { Id = 1 };
var testb = new User() { Id = 2 };
var testc = new User() { Id = 3 };

1 个答案:

答案 0 :(得分:0)

这似乎是EF github上的一个未解决问题: https://github.com/aspnet/EntityFrameworkCore/issues/6872