我正在使用使用SQLExpress数据库的Visual Studio创建一个C#应用程序。当我点击f5调试应用程序并对数据库进行更改时,我相信正在发生的事情是bin / debug文件夹中存在正在进行更改的数据库副本。
然而,当我停止调试然后在下次将数据库的新副本放入bin / debug文件夹时点击f5,以便上次所做的所有更改都消失了。
我的问题是:
有没有办法当我调试应用程序时,我可以让它对实际数据库进行更改并实际保存这些更改,或者只更改bin / debug文件夹中的副本(如果这是什么实际上正在发生?)
我见过类似的问题,但我找不到答案,说明是否可以在实际的.mdf文件中保留这些更改。
我问的原因是因为在我构建这个应用程序时,我不断添加碎片和测试以确保它们一起工作。当我输入测试数据时,我使用的是我希望保留在数据库中的实际数据。这只会帮助我不必在以后重新输入数据。
提前感谢任何可以帮助我更好地理解这一过程的帮助或信息。
答案 0 :(得分:11)
在解决方案资源管理器中选择数据库,然后将“复制到输出目录”更改为“如果更新则复制”。稍后,当您最终获得最终版本时,请将调试文件夹中的数据库复制粘贴到源文件夹
答案 1 :(得分:2)
“如果更新则复制”的问题是,当您对数据库结构的任何部分进行更改时,该更改将是Project目录中的版本,而不是您在Debug目录中构建的版本
此外,当您尝试非调试运行时,您没有使用您在调试位置中查找的副本。
我通常使用Postgresql,但由于这是一台新计算机而且我发现MS做了这个Lite版本,所以决定尝试一下。我有很多数据,这是我想要在表中的历史,然后一些手动操作与一点SQL,然后我可以继续创建数据库的实际功能。
你不能只是将修改后的版本复制到项目目录中,因为有一个日志文件,似乎没有人知道那里有什么,但微软迫切需要以某种方式匹配你的数据库文件。 (我猜你也已经尝试过了。)
每次我跑步时,我都不想从头开始,就像你一样,我找不到任何解决方案。因此,我绝望地将Debug中的版本复制到tmp目录中。然后删除项目解决方案资源管理器中的版本。
然后我将tmp中的版本拖放到解决方案资源管理器中。 (除非如下所述,否则其中的所有内容在结构上与原始内容相同)
这样做,它重新创建了该日志文件。现在我的调试会话以一个就绪加载的数据开始。
警告语。 1)更改数据库结构。 在您的解决方案资源管理器中,Linq to SQL DBML文件,如果您已在代码中更改了数据库的某些结构部分(我倾向于这样做),请右键单击DBML文件并进入设计视图。然后将您添加的任何新表或视图拖入设计中。
2)因为必须删除并拖动数据库感觉有点狡猾,所以在调试模式下复制数据库文件时,自己写一个在Form_Open上运行的函数,如
\ MyDatabaseBackup \ myDatabase_date_time.mdb
请记住,如果您确实在任何时候返回到以前的版本,则需要将其重命名为myDatabase.mdb
答案 2 :(得分:0)
将数据库复制到某个适当的位置,并将配置文件中的连接字符串更改为仅指向,这只是一个建议,因为不确定什么类型的应用程序。它是。