数据库似乎在执行期间更新,然后更改消失

Database seems to update during execution, then changes disappear

我正在尝试用 C# 创建一本食谱书,我可以在其中轻松搜索我可以使用手头的原料制作的食谱。这对我来说主要是一个学习练习。

现在,我正在尝试更新数据库中的 table。它似乎在代码的一个实例中工作,但下次我 运行 它时更改消失了。

所以我的数据库中有这样一个 table:

我根据 json 文件创建了一小部分示例食谱

var js = new JsonImporter() { SourceDirectory = Path.Combine(Directory.GetCurrentDirectory(), "test_data") };
List<Recipe> recipes = js.ImportData<Recipe>("test_recipes.json");

连接到我的 table 和 InsertAllOnSubmit:

DataContext db = new DataContext(connectionString);
Table<Recipe> db_recipes = db.GetTable<Recipe>();
db_recipes.InsertAllOnSubmit(recipes);

显示table中的条目数,提交修改,刷新条目数,再次显示table中的条目数:

MessageBox.Show(db_recipes.Count().ToString());
db.SubmitChanges();
db_recipes = db.GetTable<Recipe>();
MessageBox.Show(db_recipes.Count().ToString());

第一个消息框显示 1(我在 table 中有一行是我通过服务器资源管理器手动输入的),第二条消息显示 3。这是我所期望的,因为我添加了 2条目。

然而,一旦我再次 运行 代码,消息框再次显示 1 和 3,而不是总是递增 2。所以在我看来数据库没有保存。谁能帮我弄清楚这是怎么回事?

您从未说过您使用的是什么数据库,但我认为它很可能是基于文件的,无论是 Access 还是 SQL Server(在“在 运行time 附加 mdf 文件”模式下)

通常对于基于文件的数据库,我们最终会设置它们,以便在项目文件夹中有一个版本的 db 文件和源代码。每次构建项目时都会将其复制到输出目录,输出目录包含 exe 和 db。 exe 修改输出文件夹中的 db。下次构建时/运行 将源代码文件夹中的空白数据库复制到输出文件夹中修改过的数据库的顶部

运行 你的项目,获取 exe 修改数据库,停止 exe 然后搜索整个项目文件夹(使用 windows 文件搜索)甚至整个硬盘的名称你的数据库文件。你会通过查看文件修改日期来弄清楚发生了什么..

如果它是基于文件的数据库,请在 CS 解决方案资源管理器中找到该数据库,单击它并将其“复制到输出”设置设置为“如果较新则复制”,这样它只会擦除输出数据库,例如方案已更改