私はマルチテナントアプリケーションをさまざまな企業に使用しています。私はまだこれで成功を収めています。しかし私のシナリオは、私は異なる企業(テナント)とテーブルセットを持つ単一のSQL Serverデータベースを持っています。Nhibernateテーブルの命名規則にスキーマ接頭辞を追加
私がしたいのは、マルチテナントアプリケーションの概念に従って、テーブルにそのスキーマプレフィックスを持つテーブルにアクセスするテーブルのための規約を追加することです。テナントごとにデータベースを使用していませんが、テナントごとにスキーマを使用しています。データベースファイルは1つのファイルです。
私のテーブルは、このようなものです。Sachin Sales & Service Pvt Ltd$Web User Setup Header
です。だから私はテーブルクエリが生成されるときに、クエリの前に接頭語Sachin Sales & Service Pvt Ltd
を飛ばしておく必要があります。接頭辞は要件によって変わることがあります。その静的ではありません。だから私は、デフォルトでは、私は、スキーマの接頭辞を用いて所望のテーブル名を生成するには、このようなstring schemaname
のような別のパラメータを渡すことができますとにかくあり、この
public class TableNameConvention : IClassConvention
{
public void Apply(IClassInstance instance)
{
instance.Table(instance.EntityType.Name);
}
}
のように見えるIClassConventionをオーバーライドすると思いましたか?私の考えは次のようなことをすることです:
public class TableNameConvention : IClassConvention
{
public void Apply(IClassInstance instance, string schemaname)
{
instance.Table(schemaname + instance.EntityType.Name);
}
}
私の質問はこのようになります。私は上記のポイントを達成することができる場合は、テナントの問題ごとに私のスキーマを解決するのだろうか? 2番目の場合でも、上記のオーバーライドにschemanameをどのように渡す必要があるのですか?これは単なるコンベンションで、私はそれを実際にやりたがって操作することができないので、私はどのように呼び出すべきですか?
クウェリング中にテーブルの名前付けに接頭辞を追加するWil? – Joy
これはすべてのマッピングにスキーマ接頭辞を追加します(Configurationプロパティ "default_schema"を介して、NHibernate.Cfg.Environment.DefaultSchemaを参照)。マッピングからクエリが生成されます – Firo