我有一个 WPF 项目设置为通过 Visual Studio Express 2012 for Desktop 中的 ADO.NET 实体数据模型使用本地 SQL Server Compact 数据库。该项目运行良好,在第一次运行时,我可以加载所有数据,随意操作它,稍后返回,更改的数据仍然存在。
我注意到,在对模式进行一些重组时,VS 可见的数据只是我在创建数据库时手动输入的数据的第一部分,而下次我编译时添加的所有数据都消失了!
经过一番挖掘,我得出的结论是,应用程序的编译版本正在使用文件的 Content:Copy If Newer 构建操作发送到 bin/Debug 文件夹的 SDF 文件。这意味着可能有多达 4 个不同的数据库副本需要担心:项目文件夹、调试文件夹、发布文件夹和最终用户 PC 上的部署副本。
我想在我的开发机器上拥有一个数据库副本,可以通过调试和发布编译版本以及 VS 中的数据库浏览器访问,该数据库浏览器通过 ClickOnce 安装在最终用户的 PC 上。我想我可以在开发过程中将连接字符串更改为绝对路径,并希望我能记得在发布部署之前将其更改回相对路径。
最后,我预见到该应用程序也需要发布更新,并且担心如果执行不当,这样的更新会删除最终用户的数据。如果可能的话,我希望能够在发布更新时只更新最终用户数据库的架构,而无需触及数据本身。如果这是不可能的,那是可以接受的,我只需要确保在第一次部署之前将我能想到的每个结构都放入数据库中。
总之,我的问题如下:
如何在 VS、debug、release 之间共享单个 sql compact 数据库?
如何在应用程序部署和更新期间处理本地数据库,并可选择更新数据库架构而不擦除数据?