【问题标题】:visual studio one click publish overriding LocalDatabaseVisual Studio 一键发布覆盖 LocalDatabase
【发布时间】:2017-03-16 16:55:16
【问题描述】:

我有一个项目,我一直在用 C# 处理我想要发布的本地数据库。
问题是每次我发布一个新版本的软件时,数据库都会被覆盖,我丢失了所有数据。 如何设置项目,以免本地数据库被覆盖?

【问题讨论】:

    标签: c# visual-studio local-database oneclick


    【解决方案1】:

    在解决方案资源管理器中选择 .mfd 文件,然后转到属性 > 高级 > 复制到输出目录并选择“如果较新则复制”。仅当您在开发期间对数据库进行更改时,这将使您的数据库被覆盖。

    【讨论】:

      【解决方案2】:

      据我了解,您的本地数据库是包含在您的部署包中的文件。基于此:

      正确的方法

      从一个版本到另一个版本,您可能需要更改数据库结构或使用新功能对其进行扩展。所以,我建议从部署包中排除本地数据库文件。 不要复制数据库文件,而是使用脚本来创建数据库:

      1. 准备创建数据库的 SQL 脚本(您可能已经拥有它们,因为您已经准备好数据库)。此类脚本应在数据库不存在时创建数据库、更改存储过程、在需要时更新表等。
      2. 如果您有一些默认数据,则应与数据库一起使用 - 您也可以使用脚本简单地插入它们。如果您的初始数据库很大并且您不想编写插入脚本 - 将初始数据库包含到名称与活动数据库不同的部署包中(例如 database.initial.ext)并重命名它如果此类数据库不存在,请在应用程序启动时手动添加到您的活动数据库(例如 database.ext)。
      3. 在应用程序启动时运行创建/更新数据库的所有脚本。
      4. 继续执行您的应用程序。

      结果你应该有这样的东西(示例):

      public static void Main(object[] args)
      {
          CreateDatabaseIfNotExists();
          RunDatabaseUpdateQueries();
          InsertInitialDataIfDatabaseNew();
          // Rest of your code...
      }
      

      优点:您将获得灵活的解决方案,可以在您交付新版本时更改您的数据库。 缺点:您必须编写更新脚本并在应用程序启动时运行它们。

      解决方法

      作为建议流程的替代方案,您可以简单地执行下一步:

      1. 将数据库文件以不同的名称包含到您的部署包中(例如 database.initial.ext)。
      2. 如果数据库文件不存在,则在应用程序启动时重命名数据库文件以更正一个(例如 database.ext)。

      结果你应该有这样的东西(示例):

      public static void Main(object[] args)
      {
          CreateDatabaseIfNotExists();
          // Rest of your code...
      }
      

      优点:您需要最少的努力来实现这样的流程。

      缺点:解决方案不灵活,如果在未来版本中更新数据库结构,您将面临问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-07
        • 2018-03-27
        • 2015-09-22
        • 2011-09-06
        • 2021-11-23
        • 2015-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多