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

时间:2019-04-09 13:53:42

标签: c# sqlite entity-framework-core in-memory-database

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

但是现在我得到了:

  

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

我该如何解决?

1 个答案:

答案 0 :(得分: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 ...
        }
    } 
}