【发布时间】:2018-02-06 05:25:49
【问题描述】:
提前感谢您的帮助。
我正在使用我的 Mac 开发和使用 SQLite 作为数据库的 ASP.NET Core 应用程序(在学习 SQLite 和 EF Core 时,我通读了本教程:https://docs.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite)。迁移和更新数据库架构正在工作,但似乎 ASP.NET 应用程序正在将数据库保存在内存中。
我假设的两个原因:
- 当我使用“DB Browser For SQLite”浏览 SQLite 数据库架构和数据时,它显示任何表中都没有数据(架构存在,因此迁移正在写入磁盘)
- 当我删除 SQLite 数据库文件本身时,ASP.NET 站点仍然有删除文件中的旧数据!真的很奇怪。
有谁知道我如何让我的应用程序实际将数据写入 SQLite 文件,并阻止它存储在内存中?
再次感谢!
DbContext 文件:
public class EssBomContext : DbContext
{
public DbSet<Part> Parts { get; set; }
// Other DbSets removed for brevety
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=sqlite.db");
}
}
【问题讨论】:
-
1.我看不到您的代码,但要保存到数据库,您必须在 DbContext 上调用 SaveChanges()。
-
它将始终存储在内存中,直到您实际保存为@JoshuaWaring 指示也将跟踪记录的更改
-
感谢 Joshua 和 mvermef 的回复。不幸的是,我无法在公共仓库中分享我的代码。是的,当我进行更新或创建时,我确实调用了 .SaveChanges(),它确实将其保存在内存中。但这并不能解释为什么即使我删除 SQLite db 文件并停止网络服务器(当 'dotnet run' 命令正在运行时,在命令行中的 ctrl+c ......我正在运行.NET CLI)。
-
我相信我找到了问题!我的解决方案中有几个项目:一个 Web 项目、一个服务(业务层)项目和一个 Data.EF 项目(具有 DbContext)。当我在与 Data.EF 文件夹相同的文件夹中运行“dotnet ef 数据库更新”命令时,它会在此文件夹中创建 db 文件。但是,当在 Visual Studio for Mac(又名社区)中运行调试器或运行“dotnet run”时,它会在 Web 项目中创建另一个 db 文件!所以,它正在保存,但在不同的文件夹中。 'dotnet ef database update' 命令不在 Web 项目中运行。
-
如何让 Web 项目使用 Data.EF 项目中的数据库?
标签: c# sqlite asp.net-core entity-framework-core