EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

使用ModuleInfo表更新应用程序和数据库版本

使用业务应用程序时,一个重要的关注领域是应用程序和数据库版本兼容性。XAF提供了一种版本兼容性检查机制,该功能允许应用程序仅在应用程序和数据库具有相同版本时才运行。默认情况下,当检查所有必需的表,列和数据库本身的存在时,此机制以简化模式工作。在这种简单模式下,您无法使用业务逻辑跟踪更改,只能检测到业务模型的更改(例如,声明新的业务类或属性时)。但是,当模块的版本存储在ModuleInfo中时,可以切换到更复杂的模式表,并与它们的实际程序集版本进行比较。随着每次重新构建时装配版本的增加,将检测到模块代码的任何更改。要更改模式,可以将XafApplication.CheckCompatibilityType属性设置为CheckCompatibilityType.ModuleInfo。本主题描述如何在ModuleInfo模式下检查应用程序和数据库的兼容性。

在应用程序调试模式下,当数据库版本低于应用程序版本时,将触发数据库版本更新机制。此外,XAF还提供了用于从外部更新数据库版本的DBUpdater工具。当应用程序管理员部署新的应用程序版本并且还需要更新数据库版本时,此工具非常有用。在本主题中,您将学习如何通过DBUpdater工具直接在代码中和在应用程序发布模式下以应用程序调试模式更新应用程序数据库。要了解如何以及何时创建应用程序的数据库,请参考“创建和更新应用程序的数据库”主题。

应用程序和数据库版本策略概述

该机制eXpressApp框架用来检查应用程序和数据库版本的兼容性,和更新数据库,包括以下步骤。

更新数据库

利用ModuleUpdaterModuleUpdater.UpdateDatabaseBeforeUpdateSchemaModuleUpdater.UpdateDatabaseAfterUpdateSchema方法。在更新数据库模式之前和之后,覆盖它们以修改模块的数据库表。例如,在应用程序中应用安全系统时,这可能是必需的。应该使用UpdateDatabaseAfterUpdateSchema方法将具有管理权限的用户添加到数据库中。有关详细信息,请参阅使用安全系统提供初始数据(XPO)话题。请注意,您可以实施复杂的更新逻辑,以考虑到应用程序版本之间的差异。有关详细信息,请参阅ModuleUpdater类说明。

注意

您可以通过指定模块的程序集的固定版本(例如1.0.0.0)来阻止特定模块更新数据库。例如,可能需要强制WinForms和ASP.NET模块的版本同步。默认情况下,使用星号(*)指定内部版本号和修订版本号,并且Visual Studio自动将这些数字递增(请参见AssemblyVersionAttribute)。这会导致每个模块更新上的数据库版本不匹配。

调试时更新数据库

首次运行应用程序时,数据库中模块的版本将设置为应用程序中这些模块的版本,因此版本之间不会有冲突(请参阅创建和更新应用程序的数据库)。然后,每当您运行该应用程序时,如果在应用程序或数据库中进行了某些更改,就会执行上面定义的过程(请参见图像)。内置数据库更新程序的Update方法提供了更新过程。要调用此方法,将在每个XAF解决方案中处理XafApplication.DatabaseVersionMismatch事件(请参见下面的代码)。如果数据库版本早于应用程序版本,则在启动应用程序时引发此事件。

public partial class MySolutionWindowsFormsApplication : WinApplication {
   private static void MySolutionWindowsFormsApplication_DatabaseVersionMismatch(object sender, 
         DatabaseVersionMismatchEventArgs e) {
      if(System.Diagnostics.Debugger.IsAttached) {
         e.Updater.Update();
         e.Handled = true;
      }
   }
partial class MySolutionWindowsFormsApplication {
   //...
   private void InitializeComponent() {
      //...
      this.DatabaseVersionMismatch  = this.MySolutionWindowsFormsApplication_DatabaseVersionMismatch;
      // ...
   }
   // ...
}

此事件处理程序分别分别在Windows窗体和ASP.NET应用程序项目的Program.csProgram.vb)和Global.asax.csGlobal.asax.vb)文件中生成。

如果您需要用自己的镜像替换上图所示的机制,请处理XafApplication.CustomCheckCompatibility事件。

注意

XafApplication.DatabaseUpdateMode属性,该属性指定是在每次运行应用程序时更新数据库,还是仅在其版本早于应用程序版本时更新数据库。在VB解决方案模板中,由于很难在VB项目中增加版本,因此将该属性设置为DatabaseUpdateMode.UpdateDatabaseAlways值。因此,每次启动应用程序时都会引发XafApplication.DatabaseVersionMismatch事件,但是此值仅在调试模式下设置。

部署时更新数据库

最终用户运行已部署的应用程序时,如果数据库中的应用程序版本与实际应用程序版本不相等,并且引发异常,则不会更新数据库。因此,当您为最终用户部署XAF应用程序(其发行版本或更新版本)时,应提供与该应用程序相同版本的数据库。如果数据库版本高于实际应用程序版本,请增加应用程序版本。如果数据库版本较低,请更新数据库。为此,XAF附带了特殊的DBUpdater工具。要了解如何使用它,请参阅“应用程序更新”部署教程课程。

注意
  • 如果使用的是中间层应用程序服务器,则不需要DBUpdater。重启前,Application Server会自动更新数据库。因此,在更新了客户端应用程序之后,需要停止服务器服务,将新建的程序集复制到应用程序服务器,然后启动服务器服务。服务器将自动检查兼容性并启动更新过程。
  • DBUpdater如果XAF应用程序使用默认对象空间提供商,数据库连接字符串的应用程序配置文件中指定只能用工具。如果您的应用程序使用自定义对象空间提供程序连接到数据存储,则DBUpdater工具将无法使用。例如,假设您使用默认的对象空间提供程序和自定义数据存储提供程序来同时处理多个数据库。在这种情况下,您将需要手动更新数据库或实施自定义数据库更新程序。实施自定义数据库更新程序时,可以基于原始DBUpdater工具。可以在%PROGRAMFILES(x86)%\ DevExpress 19.2中找到其源代码。默认情况下, \ Components \ Sources \ DevExpress.ExpressApp.Tools \ DevExpress.ExpressApp.Updater文件夹。

有关XAF应用程序部署的详细信息,请参阅部署教程

Windows窗体应用程序的自动更新

启动版本早于数据库版本的Windows Forms应用程序时,可以自动更新该应用程序。为此,必须满足以下条件。

  • 应当指定具有新应用程序版本的服务器的路径。

    App.config文件中,使用NewVersionServer键指定包含更新的应用程序版本的文件夹。

    如果找不到指定的服务器或文件夹,将引发异常。

    如果未指定NewVersionServer密钥值,则将应用上面定义的机制(请参见第一个图像)。

  • DevExpress.ExpressApp.Updater.exe文件应放置在文件夹中有可执行文件。

    该工具会将应用程序版本更新为位于指定服务器上的新版本。但是,仅当新的应用程序版本等于当前数据库版本时,才执行更新。否则,将引发异常。

    默认情况下 ,Application Updater的位置为%PROGRAMFILES(x86)%\ DevExpress 19.2 \ Components \ Tools \ eXpressAppFramework \ Application Updater \ DevExpress.ExpressApp.Updater.exe

如果在尝试更新应用程序版本期间未引发任何异常,则将运行检查应用程序和数据库版本兼容性的过程(请参见上面的第一张图片)。

相关文章

转载保留此链接,注明出处