Получить полное имя таблицы для пользовательского запроса sql в Orchard CMS

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


person Peter    schedule 28.01.2017    source источник


Ответы (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
comment
Вероятно, следует отметить, что, как правило, это не очень хорошая идея, поскольку это может привести к хрупкому коду. HQL - гораздо лучший выбор, который абстрагирует эти проблемы с именами таблиц и сохранит ваш код нейтральным к БД. - person Bertrand Le Roy; 03.02.2017