我有一个我一直在用 C# 处理的项目,我想发布一个本地数据库。
问题是每次我发布新版本的软件时,数据库都会被覆盖,我丢失了所有数据。如何设置项目以使本地数据库不会被覆盖?
问问题
118 次
2 回答
0
据我了解,您的本地数据库是包含在您的部署包中的文件。基于此:
正确的方法
从一个版本到另一个版本,您可能需要更改数据库结构或使用新功能对其进行扩展。所以,我建议从部署包中排除本地数据库文件。而不是复制数据库文件使用脚本来创建数据库:
- 准备创建数据库的 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...
}
优点:你需要最少的努力来实现这样的流程。
缺点:解决方案不灵活,如果在未来版本中更新数据库结构,您将面临问题。
于 2017-03-16T18:01:24.380 回答