diff --git a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs index 01d642d17..d2e078178 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs +++ b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs @@ -19,6 +19,8 @@ using Orchard.Security; using Orchard.Settings; using Orchard.Themes; using Orchard.UI.Notify; +using Orchard.Environment.State; +using Orchard.DataMigration; namespace Orchard.Setup.Services { public class SetupService : ISetupService { @@ -27,6 +29,8 @@ namespace Orchard.Setup.Services { private readonly IShellSettingsManager _shellSettingsManager; private readonly IShellContainerFactory _shellContainerFactory; private readonly ICompositionStrategy _compositionStrategy; + private readonly IProcessingEngine _processingEngine; + private readonly IDataMigrationManager _dataMigrationManager; public SetupService( ShellSettings shellSettings, @@ -34,12 +38,16 @@ namespace Orchard.Setup.Services { IOrchardHost orchardHost, IShellSettingsManager shellSettingsManager, IShellContainerFactory shellContainerFactory, - ICompositionStrategy compositionStrategy) { + ICompositionStrategy compositionStrategy, + IProcessingEngine processingEngine, + IDataMigrationManager dataMigrationManager) { _shellSettings = shellSettings; _orchardHost = orchardHost; _shellSettingsManager = shellSettingsManager; _shellContainerFactory = shellContainerFactory; _compositionStrategy = compositionStrategy; + _processingEngine = processingEngine; + _dataMigrationManager = dataMigrationManager; T = NullLocalizer.Instance; } @@ -97,7 +105,7 @@ namespace Orchard.Setup.Services { // initialize database explicitly, and store shell descriptor var bootstrapLifetimeScope = _shellContainerFactory.CreateContainer(shellSettings, shellToplogy); using (var environment = new StandaloneEnvironment(bootstrapLifetimeScope)) { - environment.Resolve().CreateDatabase(); + _dataMigrationManager.Update(new [] { "Orchard.Framework", "Settings" }); environment.Resolve().UpdateShellDescriptor( 0, @@ -105,6 +113,10 @@ namespace Orchard.Setup.Services { shellDescriptor.Parameters); } + // in effect "pump messages" see PostMessage circa 1980 + while ( _processingEngine.AreTasksPending() ) + _processingEngine.ExecuteNextTask(); + // creating a standalone environment. // in theory this environment can be used to resolve any normal components by interface, and those diff --git a/src/Orchard/DataMigration/DefaultDataMigrationGenerator.cs b/src/Orchard/DataMigration/DefaultDataMigrationGenerator.cs index 003d207a5..f398c7103 100644 --- a/src/Orchard/DataMigration/DefaultDataMigrationGenerator.cs +++ b/src/Orchard/DataMigration/DefaultDataMigrationGenerator.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Linq; using FluentNHibernate.Cfg; -using Orchard.Data.Builders; +using Orchard.Data.Providers; using Orchard.DataMigration.Schema; using Orchard.Environment.ShellBuilders.Models; @@ -10,7 +10,7 @@ namespace Orchard.DataMigration { public IEnumerable CreateCommands(IEnumerable records) { // use FluentNhibernate generation for this module - var persistenceModel = AbstractBuilder.CreatePersistenceModel(records); + var persistenceModel = AbstractDataServicesProvider.CreatePersistenceModel(records); var configuration = Fluently.Configure().Mappings(m => m.AutoMappings.Add(persistenceModel)); return Enumerable.Empty(); diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index 2d93e7a09..0416f0c0d 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -356,6 +356,7 @@ Code +