2017-01-28 33 views
3

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

回答

2

租户的表前缀(如果有)在注入对象ShellSettings中可用。后面的表名遵循简单的规则,所以你可以硬编码(因为这不是动态的,它只取决于模块和记录的名称)。

有关示例,请参阅内置升级模块。 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}"; 
+0

这也许应该指出的是,这通常不是一个好主意,这将导致脆弱的代码。 HQL是一个更好的选择,它会将这些表名称问题抽象出来,并保持代码与DB无关。 –

相关问题