2017-01-28 18 views
3

В Orchard CMS, что является лучшим способом получить полное имя таблицы? Я хочу выполнить пользовательский SQL-запрос (поэтому не используя IRepository<T>), но для этого потребуется полное имя таблицы. Я знаю, что могу использовать SchemaBuilder.TableDbName, но для создания SchemaBuilder мне также нужен IDataMigrationInterpreter, featurePrefix и formatPrefix. Где я их получу? IDataMigrationInterpreter я могу получить через механизм инъекции зависимостей Orchard, но где я могу получить префиксы, зная, что я разрабатываю модуль и поэтому не могу жестко закодировать префиксы.Получить полное имя tabl для пользовательского запроса sql в Orchard CMS

ответ

2

Префикс таблицы арендатора (если есть) доступен в инъекционном объекте ShellSettings. Имя таблицы, которое появляется после этого, следует простым правилам, чтобы вы могли жестко программировать (поскольку это не динамическое, это зависит только от имени модуля и имени записи).

См. Встроенный модуль Upgrade для примеров, например. Upgrade.Services.UpgradeService и Upgrade.Controllers.ContentPickerController.

Пример:

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

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

Это, вероятно, следует отметить, что это вообще не хорошая идея, что может привести к хрупкой коде. HQL - гораздо лучший выбор, который позволит абстрагировать эти проблемы с именами таблиц и будет поддерживать ваш код DB-нейтральным. –