Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在内存中使用EntityFrameWorkCore和SqlLite,我得到;没有此类表格:ControlGroup“;错误_C#_Sqlite_Entity Framework Core_In Memory Database - Fatal编程技术网

C# 在内存中使用EntityFrameWorkCore和SqlLite,我得到;没有此类表格:ControlGroup“;错误

C# 在内存中使用EntityFrameWorkCore和SqlLite,我得到;没有此类表格:ControlGroup“;错误,c#,sqlite,entity-framework-core,in-memory-database,C#,Sqlite,Entity Framework Core,In Memory Database,问题的背景是,我想为我的应用程序创建一些单元测试,这些测试执行一些特定于关系的代码,因此我不能使用标准的。UseInMemoryDatabase(databaseName:dbContextName)为了解决这个问题,我将它改为。UseSqlite(“数据源=:内存:) 但现在我明白了: SqliteException:SQLite错误1:“没有这样的表:ControlGroup” 如何修复此问题?您需要在测试范围内保持连接打开,并创建数据库 public class Tests : IDisp

问题的背景是,我想为我的应用程序创建一些单元测试,这些测试执行一些特定于关系的代码,因此我不能使用标准的
。UseInMemoryDatabase(databaseName:dbContextName)
为了解决这个问题,我将它改为
。UseSqlite(“数据源=:内存:)

但现在我明白了:

SqliteException:SQLite错误1:“没有这样的表: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 ...
        }
    } 
}

检查数据库中是否存在表控制组?我真的不知道如何检查,因为它是内存中的数据库。我认为问题的原因是,当数据库连接关闭时,数据库是透明的。我意识到必须保持连接打开,context.database.EnsureCreated();是这个问题的关键(当从inMemory更改为SqlLite in memory时),我认为您可以更新您的响应以突出显示这一点,并使具有相同问题的人能够更快地看到它。我正在学习本教程,它可能会帮助其他具有相同问题的人