EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

创建和更新应用程序的数据库

XAF应用程序的模板已实现,以便在首次运行该应用程序时创建一个数据库,并在该应用程序的版本增加时进行更新。本主题详细介绍了此行为的原因以及修改它的方法。

注意

使用Entity Framework数据模型时,XAF不会更新现有的数据库架构。要同步数据模型和数据库,请遵循开发常规非XAF应用程序时所采用的相同方法:代码优先迁移

当应用程序的版本等于数据库版本时,该应用程序将成功运行。因此,每次启动应用程序时,都会检查版本兼容性。在此过程中,系统正在尝试访问数据库。首次运行应用程序时,该数据库尚不存在。因此,引发了一个异常。不会引发此异常,但是会引发XafApplication.DatabaseVersionMismatch事件,使您有机会创建数据库。因此,您不必处理正确的数据库创建,此事件在XAF应用程序模板中处理。请参阅您的应用程序项目中的XXXApplication.cs(XXXApplication.vb)文件。事件处理程序如下所示:

public partial class MySolutionWindowsFormsApplication : WinApplication {
    //...
    private void MySolutionWindowsFormsApplication_DatabaseVersionMismatch(
       object sender, DevExpress.ExpressApp.DatabaseVersionMismatchEventArgs e) {
        if(System.Diagnostics.Debugger.IsAttached) {
            e.Updater.Update();
            e.Handled = true;
        }
        else {
            string message = "The application cannot connect to the specified database, "  
                "because the database doesn't exist, its version is older "  
                "than that of the application or its schema does not match "  
                "the ORM data model structure. To avoid this error, use one "  
                "of the solutions from the https://www.devexpress.com/kb=T367835 KB Article.";

            if(e.CompatibilityError != null && e.CompatibilityError.Exception != null) {
                message  = "\r\n\r\nInner exception: "   e.CompatibilityError.Exception.Message;
            }
            throw new InvalidOperationException(message);
        }
    }
}

CheckCompatibilityType设置指定的数据库与应用程序的兼容性如何被选中。该DatabaseVersionMismatch事件会在数据库版本不匹配的应用程序的版本。

当您通过中间层应用服务器连接到数据库时,兼容性检查是在服务器端执行的。XafApplication.DatabaseVersionMismatch事件发生时引发异常。

public partial class MySolutionWindowsFormsApplication : WinApplication {
    //...
    private void MySolutionWindowsFormsApplication_DatabaseVersionMismatch(
        object sender, DevExpress.ExpressApp.DatabaseVersionMismatchEventArgs e) {
        string message = "Application cannot connect to the specified database.";
        CompatibilityDatabaseIsOldError isOldError = e.CompatibilityError as CompatibilityDatabaseIsOldError;
        if (isOldError != null && isOldError.Module != null) {
            message = "The client application cannot connect "  
                      "to the Middle Tier Application Server and its database. "  
                      "To avoid this error, ensure that both the client and the server "  
                      "have the same modules set. Problematic module: "   isOldError.Module.Name  
                      ". For more information, see https://docs.devexpress.com/eXpressAppFramework/113439/concepts/"  
                      "security-system/middle-tier-security-wcf-service#troubleshooting";
            }
        if (e.CompatibilityError == null) {
            message = "You probably tried to update the database in Middle Tier Security mode "  
                      "from the client side. In this mode, the server application updates "  
                      "the database automatically. To disable the automatic database update, set the "  
                      "XafApplication.DatabaseUpdateMode property to the DatabaseUpdateMode.Never value "  
                      "in the client application.";
            }
        throw new InvalidOperationException(message);
    }
}

有关如何向应用程序的数据库提供连接字符串的信息,请参阅将XAF应用程序连接到数据库提供程序主题。

您可以在使用ModuleInfo Table主题更新应用程序和数据库版本中找到有关检查应用程序的过程以及数据库版本兼容性的更多信息。

注意

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

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