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时),我认为您可以更新您的响应以突出显示这一点,并使具有相同问题的人能够更快地看到它。我正在学习本教程,它可能会帮助其他具有相同问题的人