2

.NET MVC 3 と PetaPoco を使用して共有データベースを持つマルチテナント アプリを構築しています。テナント ID は (他の情報と共に) ログイン時に FormsAuth Cookie に保存され、BaseController プロパティを介してすべてのコントローラーで使用できます。ほとんどのテーブル (つまり、メインの「テナント」テーブルを除く) には、TenantId 列が含まれています。

'WHERE TenantId = X' をフィーチャ テーブルのすべての CRUD に手動で追加する代わりに、これを実行直前にクエリに動的に追加する方法はありますか? つまり、テーブルのリストを維持し、クエリがそれらのテーブルの 1 つに対するものである場合は、TenantId フィルターを動的に追加しますか?

もちろん、フィルターを手動で追加する必要がなくなり、除外される可能性が減るという利点があります。NHibernate を使用した例を見つけましたが、これを転用できるとは思えません。違いが生じる場合に備えて、Ninjectを使用しています。

4

1 に答える 1

0

Database クラスには OnCommandExecuting メソッドがあり、独自のサブクラスでオーバーライドして、SQL が実行される直前に必要に応じて変更できます。この機能を使用して、Sql Server と Oracle の間で isnull/nvl を変換します。

SQLにマーカーを残して、ここで置き換えることができます。

于 2011-10-04T11:19:23.727 に答える