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

C# 数据库似乎在执行期间更新,然后更改消失,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我正在尝试用C语言创建一本食谱书,在这里我可以很容易地搜索我可以用手上的配料制作的食谱。在这一点上,我主要是在学习 现在,我正在尝试更新数据库中的表。它似乎在代码的一个实例中工作,但在下次运行它时,更改就消失了 因此,我的数据库中有一个如下表: 我从一个json文件创建了一个小的示例配方列表 var js = new JsonImporter() { SourceDirectory = Path.Combine(Directory.GetCurrentDirectory(), "tes

我正在尝试用C语言创建一本食谱书,在这里我可以很容易地搜索我可以用手上的配料制作的食谱。在这一点上,我主要是在学习

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

因此,我的数据库中有一个如下表:

我从一个json文件创建了一个小的示例配方列表

var js = new JsonImporter() { SourceDirectory = Path.Combine(Directory.GetCurrentDirectory(), "test_data") };
List<Recipe> recipes = js.ImportData<Recipe>("test_recipes.json");
连接到我的表格并插入AllonSubmit:

DataContext db = new DataContext(connectionString);
Table<Recipe> db_recipes = db.GetTable<Recipe>();
db_recipes.InsertAllOnSubmit(recipes);
显示表中有多少条目,提交更改,刷新条目数,然后再次显示表中有多少条目:

MessageBox.Show(db_recipes.Count().ToString());
db.SubmitChanges();
db_recipes = db.GetTable<Recipe>();
MessageBox.Show(db_recipes.Count().ToString());
第一个消息框显示1我在表中有一行是通过服务器资源管理器手动输入的,第二个消息显示3。这是我所期望的,因为我添加了两个条目


但是,一旦我再次运行代码,消息框会再次显示1和3,而不是总是递增2。因此,在我看来,数据库似乎没有保存。有人能帮我弄清楚这里发生了什么吗?

您从未说过您使用的是什么数据库,但我认为它很可能是基于文件的,可以是Access,也可以是运行时附加mdf文件模式下的SQL Server

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

中修改的数据库顶部。 运行项目,获取exe以修改数据库,停止exe,然后使用windows文件搜索甚至整个硬盘搜索整个项目文件夹以查找数据库文件的名称。通过查看文件修改日期,您将了解发生了什么


如果是基于文件的数据库,请在CS解决方案资源管理器中找到该数据库,单击该数据库,并将其“复制到输出”设置设置为“复制(如果更新)”,以便仅在方案发生更改时清除输出数据库。您从未说过要使用什么数据库,但我认为它很可能是基于文件的,Access或SQL Server在运行时模式下附加mdf文件

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

中修改的数据库顶部。 运行项目,获取exe以修改数据库,停止exe,然后使用windows文件搜索甚至整个硬盘搜索整个项目文件夹以查找数据库文件的名称。通过查看文件修改日期,您将了解发生了什么


如果是基于文件的数据库,请在CS解决方案资源管理器中找到该数据库,单击该数据库,并将其“复制到输出”设置设置为“复制(如果更新)”,以便仅在方案发生更改时清除输出数据库

在重新运行代码之前,您是否使用数据库客户端而不是您的C应用程序检查了数据库本身?如果数据库在此阶段显示更新,并且在您重新运行C应用程序时丢失更新,则可能缺少数据库提交。仅供参考:包括您正在使用的数据库,例如Sql Server。MySql、Postgres等和版本号。是的,我检查过了,数据库在执行过程中没有更新。谢谢老实说,我再也找不到我用来创建数据库的指南了。我想是MS-SQL。当我在SQL Server对象资源管理器中查找它时,它被称为localdb\MSSQLLocalDB SQL Server 13.0.4001-{username}。我还不确定这一切意味着什么。在重新运行代码之前,您是否使用数据库客户端(而不是您的C应用程序)检查了数据库本身的更新是否正确?如果数据库在此阶段显示更新,并且在您重新运行C应用程序时丢失更新,则可能缺少数据库提交。仅供参考:包括您正在使用的数据库,例如Sql Server。MySql、Postgres等和版本号。是的,我检查过了,数据库在执行过程中没有更新。谢谢老实说,我再也找不到我用来创建数据库的指南了。我想是MS-SQL。当我在SQL Server对象资源管理器中查找它时,它被称为localdb\MSSQLLocalDB SQL Server 13.0.4001-{username}。我还不确定这意味着什么。