在内存中使用 Entity FrameWork Core 和 Sqlite 我得到 "no such table: ControlGroup" 错误

Using EntityFrameWorkCore and SqlLite in memory I get "no such table: ControlGroup" error

我的问题的背景是,我想为我的应用程序创建一些单元测试来执行一些特定于关系的代码,所以我不能使用标准 .UseInMemoryDatabase(databaseName: dbContextName) 我将其更改为 .UseSqlite("DataSource=:memory:") 而不是为了解决这个问题。

但现在我得到:

SqliteException: SQLite Error 1: 'no such table: ControlGroup'.

我该如何解决这个问题?

您需要在测试范围内保持连接打开并创建数据库。

public class Tests : IDisposable
{
    private readonly SqliteConnection _connection;
    private readonly DbContextOptions _options;

    public Tests()
    {
        _connection = new SqliteConnection("datasource=:memory:");
        _connection.Open();

        _options = new DbContextOptionsBuilder()
            .UseSqlite(_connection)
            .Options;

        using (var context = new MyContext(_options))
            context.Database.EnsureCreated();
    }

    public void Dispose()
    {
        _connection.Close();
    }

    [Fact]
    public void Test()
    {
        using (var context = new MyContext(_options))
        {
            // use in memory database
            context.ControlGroup ...
        }
    } 
}