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

Orchardcms 获取Orchard CMS中自定义sql查询的完整表名,orchardcms,orchard-modules,Orchardcms,Orchard Modules,在Orchard CMS中,获取完整表名的最佳方法是什么?我想执行一个自定义SQL查询(因此不使用IRepository),但需要完整的表名。我知道我可以使用schemabilder.TableDbName,但是要创建schemabilder,我还需要一个IDatamigration解释器、featurePrefix和formatPrefix。我在哪里买的?我可以通过Orchard的依赖注入机制获得IDatamigration解释器,但是我在哪里可以获得前缀,因为我知道我正在开发一个模块,因此无

在Orchard CMS中,获取完整表名的最佳方法是什么?我想执行一个自定义SQL查询(因此不使用
IRepository
),但需要完整的表名。我知道我可以使用
schemabilder.TableDbName
,但是要创建schemabilder,我还需要一个IDatamigration解释器、featurePrefix和formatPrefix。我在哪里买的?我可以通过Orchard的依赖注入机制获得IDatamigration解释器,但是我在哪里可以获得前缀,因为我知道我正在开发一个模块,因此无法硬编码前缀。

租户的表前缀(如果有)可以在可注入的
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}";

应该指出的是,这通常不是一个好主意,这将导致脆弱的代码。HQL是一个更好的选择,它将抽象那些表名问题,并保持代码数据库中立。