visual studio单击发布覆盖LocalDatabase
问题描述:
我有一个项目,我一直在用C#处理本地数据库,我想发布。
问题是,每当我发布一个新版本的操作系统时,数据库都会被忽略,并且我丢失了所有的数据。 我如何设置项目以便本地数据库不会被覆盖?visual studio单击发布覆盖LocalDatabase
答
据我了解您的本地数据库是纳入您的部署包中的文件。在此基础上:
正确的方法
因版本,你可能需要更改数据库结构或新的功能扩展。所以,我建议从部署包中排除本地数据库文件。 而是复制数据库文件使用脚本创建数据库:
- 准备用于创建数据库(你可能已经拥有它们,因为你必须准备好数据库)的SQL脚本。这样的脚本应该创建数据库,如果它不存在,更改存储过程,如果需要更新表格等。
- 如果您有一些默认数据,它应该与数据库一起使用 - 您可以简单地将它们与脚本一起插入。如果您的初始数据库很大,并且您不想编写插入脚本 - 将初始数据库包含到名称与活动数据库不同的部署包中(例如database.initial.ext),并将其手动重命名为活动数据库(例如database.ext)在应用程序启动时(如果此基础不存在)。
- 在应用程序启动时运行所有创建/更新数据库的脚本。
- 继续执行您的应用程序。
至于导致你应该有这样的事情(样品):
public static void Main(object[] args)
{
CreateDatabaseIfNotExists();
RunDatabaseUpdateQueries();
InsertInitialDataIfDatabaseNew();
// Rest of your code...
}
优点:您将获得灵活的解决方案,当你提供新的版本可能会改变你的数据库。 缺点:您必须编写更新脚本并在应用程序启动时运行它们。
解决方法
作为替代拟议流,你可以简单地做下一个:
- 包括数据库文件到您的部署包用不同的名称(例如database.initial.ext)。
- 在应用程序启动时重命名数据库文件以更正其中一个(例如database.ext),如果它不存在。
至于导致你应该有这样的事情(样品):
public static void Main(object[] args)
{
CreateDatabaseIfNotExists();
// Rest of your code...
}
优点:你需要免得努力实现这样的流动。
缺点:的解决方案是不灵活,你将面临的问题的情况下,如果数据库结构应该在未来的版本更新。