在 Orchard CMS 中获取自定义 sql 查询的完整表名

Get full tablename for custom sql query in Orchard CMS

在 Orchard CMS 中,获取完整 table 名称的最佳方法是什么?我想执行自定义 SQL 查询(因此不使用 IRepository<T>),但需要完整的 table 名称。我知道我可以使用 SchemaBuilder.TableDbName 但要创建 SchemaBuilder,我还需要一个 IDataMigrationInterpreter、featurePrefix 和 formatPrefix。我从哪里得到这些?我可以通过 Orchard 的依赖注入机制获得 IDataMigrationInterpreter,但是我知道我正在开发一个模块,所以我不能从哪里获得前缀。

租户的 table 前缀(如果有)在 injectable ShellSettings 对象中可用。紧随其后的 table 名称遵循简单规则,因此您可以 hard-code 那(因为这不是动态的,它仅取决于模块名称和记录名称)。

有关示例,请参阅 built-in 升级模块,例如Upgrade.Services.UpgradeServiceUpgrade.Controllers.ContentPickerController.

示例:

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

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