1

さまざまな企業でマルチテナント アプリケーションを使用しています。私はまだこれで成功していません。しかし、私のシナリオは、さまざまな会社 (テナント) のテーブルセットを持つ単一の SQL サーバー データベースを持っていることです。

したがって、私がやりたいことは、マルチテナント アプリケーションの概念に従って、テーブル内のスキーマ プレフィックスを使用してテーブルにアクセスするテーブルの規約を追加することです。テナントごとにデータベースを使用していませんが、テナントごとにスキーマを使用しています。データベース ファイルは単一のファイルです。

私がやりたいのは、私のテーブルがこのようなものであることSachin Sales & Service Pvt Ltd$Web User Setup Headerです。そのため、テーブルクエリが生成されるときに、クエリを実行するSachin Sales & Service Pvt Ltd前にプレフィックスを追加する必要があります。接頭辞は必要に応じて変更される場合があります。静的ではありません。だから私はデフォルトでこのように見える IClassConvention をオーバーライドすることを考えました

 public class TableNameConvention : IClassConvention
{
    public void Apply(IClassInstance instance)
    {
        instance.Table( instance.EntityType.Name);
    }
}

とにかくstring schemaname、このような別のパラメーターを渡して、スキーマプレフィックス付きの目的のテーブル名を生成できますか? 私の考えは、次のようなことをすることです:

public class TableNameConvention : IClassConvention
{
    public void Apply(IClassInstance instance, string schemaname )
    {
        instance.Table(schemaname + instance.EntityType.Name);
    }
}

もしそうなら、私の質問はこのようにここにあります。上記の点を達成できれば、テナントごとのスキーマの問題は解決しますか? そして2番目に、コンパイル中に上記のエラーが発生しない場合でも(技術的にはそうすべきではありません)、スキーマ名をそのオーバーライドに渡すにはどうすればよいですか?これは単なる慣習であり、その場で操作できないため、どのように呼び出す必要があるかを意味します(実際にやりたい)

4

1 に答える 1

2

nhibernate を構成するときに、すべてのテーブルのスキーマの使用を設定できます。

Fluently.Configure().Database(MsSqlConfiguration.MsSql2005.DefaultSchema(sometenantsSchema))
于 2012-04-26T10:24:51.223 に答える