Как лучше всего получить полное имя таблицы в Orchard CMS? Я хочу выполнить собственный SQL-запрос (поэтому не используя IRepository<T>
), но для этого потребуется полное имя таблицы. Я знаю, что могу использовать SchemaBuilder.TableDbName
, но для создания SchemaBuilder мне также нужны IDataMigrationInterpreter, featurePrefix и formatPrefix. Где мне их взять? IDataMigrationInterpreter я могу получить через механизм внедрения зависимостей Orchard, но где я могу получить префиксы, зная, что я разрабатываю модуль и поэтому не могу жестко закодировать префиксы.
Получить полное имя таблицы для пользовательского запроса sql в Orchard CMS
Ответы (1)
Префикс таблицы арендатора (если есть) доступен во вводимом объекте ShellSettings
. Имя таблицы, которое следует за этим, следует простым правилам, поэтому вы можете жестко закодировать его (поскольку оно не является динамическим, оно зависит только от модуля и имени записи).
См. встроенный модуль обновления для примеров, например. 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}";
person
Piedone
schedule
30.01.2017
Вероятно, следует отметить, что, как правило, это не очень хорошая идея, поскольку это может привести к хрупкому коду. HQL - гораздо лучший выбор, который абстрагирует эти проблемы с именами таблиц и сохранит ваш код нейтральным к БД.
- person Bertrand Le Roy; 03.02.2017