在内存中使用EntityFrameWorkCore和Sqlite我得到“没有这样的表:ControlGroup”错误

问题描述 投票:1回答:1

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

但现在我得到:

SqliteException:SQLite错误1:'没有这样的表:ControlGroup'。

我怎样才能解决这个问题?

c# sqlite entity-framework-core in-memory-database
1个回答
1
投票

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

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 ...
        }
    } 
}
© www.soinside.com 2019 - 2024. All rights reserved.