2017-01-28 5 views
3

Orchard CMSでは、完全なテーブル名を取得する最もよい方法は何ですか?カスタムSQLクエリを実行したいので(IRepository<T>を使用しないでください)、このために完全なテーブル名が必要です。 SchemaBuilder.TableDbNameを使用できますが、SchemaBuilderを作成するには、IDataMigrationInterpreter、featurePrefix、およびformatPrefixも必要です。どこで入手できますか? IDataMigrationInterpreter Orchardの依存性注入メカニズムを介して取得できますが、どこでモジュールを開発しているので、接頭辞をハードコードすることはできません。Orchard CMSでカスタムSQLクエリの完全なtablenameを取得

答えて

2

テナントのテーブル接頭辞(存在する場合)は、注射可能な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}"; 
+0

おそらく、それは一般的に脆いコードにつながる素晴らしいアイデア、ないことを指摘すべきです。これらのテーブル名の問題を抽象化して、コードをDBに中立に保ちます。 –

関連する問題