2017-01-28 1 views
3

In Orchard CMS, was ist der beste Weg, um den vollständigen Tabellennamen zu erhalten? Ich möchte eine benutzerdefinierte SQL-Abfrage durchführen (also nicht IRepository<T>), aber würde den vollständigen Tabellennamen dafür benötigen. Ich weiß, dass ich SchemaBuilder.TableDbName verwenden kann, aber um den SchemaBuilder zu erstellen, brauche ich auch einen IDataMigrationInterpreter, featurePrefix und formatPrefix. Wo bekomme ich diese? Der IDataMigrationInterpreter kann ich über den Dependency-Injection-Mechanismus von Orchard erhalten, aber woher kann ich die Präfixe bekommen, da ich weiß, dass ich ein Modul entwickle und so die Präfixe nicht fest codieren kann.Erhalten Sie vollständige Tabellenname für benutzerdefinierte SQL-Abfrage in Orchard CMS

Antwort

2

Das Tabellenpräfix des Mandanten (falls vorhanden) ist im injizierbaren Objekt ShellSettings verfügbar. Der Tabellenname, der danach kommt, folgt einfachen Regeln, so dass Sie ihn fest codieren können (da dies nicht dynamisch ist, hängt es nur vom Namen des Moduls und des Datensatzes ab).

Siehe das integrierte Upgrade-Modul für Beispiele, z. Upgrade.Services.UpgradeService und Upgrade.Controllers.ContentPickerController.

Beispiel:

var tablePrefix = _shellSettings.DataTablePrefix; 
var featurePrefix = "MyModule_MyFeature"; 
if (string.IsNullOrWhiteSpace(tablePrefix)) { 
    return $"{featurePrefix}_{type.Name}"; 
} 

return $"{tablePrefix}_{featurePrefix}_{type.Name}"; 
+0

Wahrscheinlich sollte darauf hingewiesen werden, dass es in der Regel keine gute Idee, die in spröden Code führen würde. HQL ist eine viel bessere Wahl, die diese Tabellennamen Probleme abstrahieren und Ihren Code DB-neutral halten wird. –

Verwandte Themen