diff --git a/src/Orchard.Tests/DataMigration/Utilities/NullInterpreter.cs b/src/Orchard.Tests/DataMigration/Utilities/NullInterpreter.cs index 025970a55..6092e2d30 100644 --- a/src/Orchard.Tests/DataMigration/Utilities/NullInterpreter.cs +++ b/src/Orchard.Tests/DataMigration/Utilities/NullInterpreter.cs @@ -29,5 +29,8 @@ namespace Orchard.Tests.DataMigration.Utilities { return tableName; } + public string RemovePrefixFromTableName(string prefixedTableName) { + return prefixedTableName; + } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/TenantService.cs b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/TenantService.cs index 0705fd919..7869b3061 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/TenantService.cs +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/TenantService.cs @@ -105,7 +105,6 @@ namespace Orchard.MultiTenancy.Services { private IEnumerable GetTenantDatabaseTableNames(IWorkContextScope environment) { var sessionFactoryHolder = environment.Resolve(); - var schemaBuilder = new SchemaBuilder(environment.Resolve()); var configuration = sessionFactoryHolder.GetConfiguration(); var result = @@ -116,15 +115,15 @@ namespace Orchard.MultiTenancy.Services { } private void DropTenantDatabaseTables(IWorkContextScope environment) { - var sessionFactoryHolder = environment.Resolve(); + var tableNames = GetTenantDatabaseTableNames(environment); var schemaBuilder = new SchemaBuilder(environment.Resolve()); - var configuration = sessionFactoryHolder.GetConfiguration(); - foreach (var mapping in configuration.ClassMappings) { + + foreach (var tableName in tableNames) { try { - schemaBuilder.DropTable(mapping.Table.Name); + schemaBuilder.DropTable(schemaBuilder.RemoveDataTablePrefix(tableName)); } catch (Exception ex) { - Logger.Warning(ex, "Failed to drop table '{0}'.", mapping.Table.Name); + Logger.Warning(ex, "Failed to drop table '{0}'.", tableName); } } } diff --git a/src/Orchard/Data/Migration/Interpreters/DefaultDataMigrationInterpreter.cs b/src/Orchard/Data/Migration/Interpreters/DefaultDataMigrationInterpreter.cs index fcb611f3c..77f0a01aa 100644 --- a/src/Orchard/Data/Migration/Interpreters/DefaultDataMigrationInterpreter.cs +++ b/src/Orchard/Data/Migration/Interpreters/DefaultDataMigrationInterpreter.cs @@ -19,7 +19,6 @@ namespace Orchard.Data.Migration.Interpreters { private readonly IEnumerable _commandInterpreters; private readonly Lazy _dialectLazy; private readonly List _sqlStatements; - private readonly ISessionFactoryHolder _sessionFactoryHolder; private const char Space = ' '; @@ -32,7 +31,6 @@ namespace Orchard.Data.Migration.Interpreters { _sessionLocator = sessionLocator; _commandInterpreters = commandInterpreters; _sqlStatements = new List(); - _sessionFactoryHolder = sessionFactoryHolder; Logger = NullLogger.Instance; T = NullLocalizer.Instance; @@ -80,7 +78,6 @@ namespace Orchard.Data.Migration.Interpreters { primaryKeysQuoted.Add(_dialectLazy.Value.QuoteForColumnName(pk)); } - builder.Append(_dialectLazy.Value.PrimaryKeyString) .Append(" ( ") .Append(String.Join(", ", primaryKeysQuoted.ToArray())) @@ -99,6 +96,12 @@ namespace Orchard.Data.Migration.Interpreters { return _shellSettings.DataTablePrefix + "_" + tableName; } + public string RemovePrefixFromTableName(string prefixedTableName) { + if (string.IsNullOrEmpty(_shellSettings.DataTablePrefix)) + return prefixedTableName; + return prefixedTableName.Substring(_shellSettings.DataTablePrefix.Length + 1); + } + public override void Visit(DropTableCommand command) { if (ExecuteCustomInterpreter(command)) { return; diff --git a/src/Orchard/Data/Migration/Interpreters/IDataMigrationInterpreter.cs b/src/Orchard/Data/Migration/Interpreters/IDataMigrationInterpreter.cs index 81ed48590..fdfffea04 100644 --- a/src/Orchard/Data/Migration/Interpreters/IDataMigrationInterpreter.cs +++ b/src/Orchard/Data/Migration/Interpreters/IDataMigrationInterpreter.cs @@ -10,5 +10,6 @@ namespace Orchard.Data.Migration.Interpreters { void Visit(CreateForeignKeyCommand command); void Visit(DropForeignKeyCommand command); string PrefixTableName(string tableName); + string RemovePrefixFromTableName(string prefixedTableName); } } diff --git a/src/Orchard/Data/Migration/Schema/SchemaBuilder.cs b/src/Orchard/Data/Migration/Schema/SchemaBuilder.cs index de5291a61..627836efa 100644 --- a/src/Orchard/Data/Migration/Schema/SchemaBuilder.cs +++ b/src/Orchard/Data/Migration/Schema/SchemaBuilder.cs @@ -30,12 +30,19 @@ namespace Orchard.Data.Migration.Schema { } /// - /// Translate Table name into database table name - including prefixes + /// Translate Table name into database table name - including prefixes. /// public virtual string TableDbName(string srcTable) { return _interpreter.PrefixTableName(String.Concat(FormatPrefix(FeaturePrefix), srcTable)); } - + + /// + /// Removes the data table prefix from the specified table name. + /// + public virtual string RemoveDataTablePrefix(string prefixedTableName) { + return _interpreter.RemovePrefixFromTableName(prefixedTableName); + } + public SchemaBuilder CreateTable(string name, Action table) { var createTable = new CreateTableCommand(String.Concat(_formatPrefix(_featurePrefix), name)); table(createTable);