В Orchard CMS, что является лучшим способом получить полное имя таблицы? Я хочу выполнить пользовательский SQL-запрос (поэтому не используя IRepository<T>
), но для этого потребуется полное имя таблицы. Я знаю, что могу использовать SchemaBuilder.TableDbName
, но для создания SchemaBuilder мне также нужен IDataMigrationInterpreter, featurePrefix и formatPrefix. Где я их получу? IDataMigrationInterpreter я могу получить через механизм инъекции зависимостей Orchard, но где я могу получить префиксы, зная, что я разрабатываю модуль и поэтому не могу жестко закодировать префиксы.Получить полное имя tabl для пользовательского запроса sql в Orchard CMS
3
A
ответ
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}";
Это, вероятно, следует отметить, что это вообще не хорошая идея, что может привести к хрупкой коде. HQL - гораздо лучший выбор, который позволит абстрагировать эти проблемы с именами таблиц и будет поддерживать ваш код DB-нейтральным. –