EF Core SqLite 内存数据库出现“no such table”错误?

3

我使用了UseInMemoryDatabase()配置我的ASP.NET Core 2.2应用程序,它运行良好。现在我将其更改为关系型Sqlite内存数据库。

Startup.cs

 services.AddDbContext<ApplicationContext>(options => options.UseSqlite("Datasource=file::memory:?cache=shared"));

我在单元测试中使用了这种内存中的Sqlite方法,效果很好。因此决定在我的应用程序中使用相同的内存中Sqlite(以测试一些东西,在应用程序准备好后我会在磁盘上创建sqlite文件)。问题是当我启动我的应用程序时,我会收到错误信息,例如 SqliteException:SQLite Error 1:'没有这样的表:USERS'。我调试了我的repository类并发现上下文中有User表。所以Sqlite内存在单元测试中工作得很好,但在真实的应用程序中会抛出错误。为什么呢?感谢任何提示。

enter image description here

1个回答

1
创建并应用迁移至内存中的SQLite数据库。由于数据库仅存在于内存中,直到应用程序退出,因此您需要每次应用程序启动时都应用它们。

2
在Startup.cs文件的ConfigureServices()方法中,我打开了与数据库的连接。在Configure()方法中,我获取上下文并运行context.Database.Migrate()。仍然出现相同的错误,但当我使用context.Database.EnsureCreated()时,它可以无错误地启动。因此,迁移不起作用,只有创建数据库模式可以正常工作。 - miuosh
请问您能提供如何完成这个任务的指导吗? - dwilli
1
@dwilli 我升级到了新版本的ASP.NET Core,并且目前正在使用内存数据库。services.AddDbContext<ApplicationContext>(options => { options.UseInMemoryDatabase(databaseName: "MyTestDb"); } ); - miuosh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接