mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Fixed removal of database tables when using data table prefix.
This commit is contained in:
@@ -29,5 +29,8 @@ namespace Orchard.Tests.DataMigration.Utilities {
|
||||
return tableName;
|
||||
}
|
||||
|
||||
public string RemovePrefixFromTableName(string prefixedTableName) {
|
||||
return prefixedTableName;
|
||||
}
|
||||
}
|
||||
}
|
@@ -105,7 +105,6 @@ namespace Orchard.MultiTenancy.Services {
|
||||
|
||||
private IEnumerable<string> GetTenantDatabaseTableNames(IWorkContextScope environment) {
|
||||
var sessionFactoryHolder = environment.Resolve<ISessionFactoryHolder>();
|
||||
var schemaBuilder = new SchemaBuilder(environment.Resolve<IDataMigrationInterpreter>());
|
||||
var configuration = sessionFactoryHolder.GetConfiguration();
|
||||
|
||||
var result =
|
||||
@@ -116,15 +115,15 @@ namespace Orchard.MultiTenancy.Services {
|
||||
}
|
||||
|
||||
private void DropTenantDatabaseTables(IWorkContextScope environment) {
|
||||
var sessionFactoryHolder = environment.Resolve<ISessionFactoryHolder>();
|
||||
var tableNames = GetTenantDatabaseTableNames(environment);
|
||||
var schemaBuilder = new SchemaBuilder(environment.Resolve<IDataMigrationInterpreter>());
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -19,7 +19,6 @@ namespace Orchard.Data.Migration.Interpreters {
|
||||
private readonly IEnumerable<ICommandInterpreter> _commandInterpreters;
|
||||
private readonly Lazy<Dialect> _dialectLazy;
|
||||
private readonly List<string> _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<string>();
|
||||
_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;
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -30,12 +30,19 @@ namespace Orchard.Data.Migration.Schema {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Translate Table name into database table name - including prefixes
|
||||
/// Translate Table name into database table name - including prefixes.
|
||||
/// </summary>
|
||||
public virtual string TableDbName(string srcTable) {
|
||||
return _interpreter.PrefixTableName(String.Concat(FormatPrefix(FeaturePrefix), srcTable));
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Removes the data table prefix from the specified table name.
|
||||
/// </summary>
|
||||
public virtual string RemoveDataTablePrefix(string prefixedTableName) {
|
||||
return _interpreter.RemovePrefixFromTableName(prefixedTableName);
|
||||
}
|
||||
|
||||
public SchemaBuilder CreateTable(string name, Action<CreateTableCommand> table) {
|
||||
var createTable = new CreateTableCommand(String.Concat(_formatPrefix(_featurePrefix), name));
|
||||
table(createTable);
|
||||
|
Reference in New Issue
Block a user