diff --git a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs index 439212369..7e70e6e8c 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs +++ b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs @@ -8,6 +8,7 @@ using Orchard.Core.Common.Models; using Orchard.Core.Common.Settings; using Orchard.Core.Navigation.Models; using Orchard.Core.Routable.Models; +using Orchard.Core.Settings.Descriptor.Records; using Orchard.Core.Settings.Models; using Orchard.Data; using Orchard.Data.Migration.Interpreters; @@ -108,28 +109,36 @@ namespace Orchard.Setup.Services { // initialize database explicitly, and store shell descriptor var bootstrapLifetimeScope = _shellContainerFactory.CreateContainer(shellSettings, shellToplogy); - using (var environment = new StandaloneEnvironment(bootstrapLifetimeScope)) { + using ( var environment = new StandaloneEnvironment(bootstrapLifetimeScope) ) { - var schemaBuilder = new SchemaBuilder(environment.Resolve() ); - var reportsCoordinator = environment.Resolve(); + // check if the database is already created (in case an exception occured in the second phase) + var shellDescriptorRepository = environment.Resolve>(); + try { + shellDescriptorRepository.Get(x => true); + } + catch { + var schemaBuilder = new SchemaBuilder(environment.Resolve()); + var reportsCoordinator = environment.Resolve(); - reportsCoordinator.Register("Data Migration", "Setup", "Orchard installation"); + reportsCoordinator.Register("Data Migration", "Setup", "Orchard installation"); - schemaBuilder.CreateTable("Orchard_Framework_DataMigrationRecord", table => table - .Column("Id", column => column.PrimaryKey().Identity()) - .Column("DataMigrationClass") - .Column("Version")); + schemaBuilder.CreateTable("Orchard_Framework_DataMigrationRecord", + table => table + .Column("Id", column => column.PrimaryKey().Identity()) + .Column("DataMigrationClass") + .Column("Version")); - var dataMigrationManager = environment.Resolve(); + var dataMigrationManager = environment.Resolve(); - foreach ( var feature in context.EnabledFeatures ) { - dataMigrationManager.Update(feature); - } + foreach ( var feature in context.EnabledFeatures ) { + dataMigrationManager.Update(feature); + } - environment.Resolve().UpdateShellDescriptor( - 0, - shellDescriptor.Features, - shellDescriptor.Parameters); + environment.Resolve().UpdateShellDescriptor( + 0, + shellDescriptor.Features, + shellDescriptor.Parameters); + } } // in effect "pump messages" see PostMessage circa 1980