0

マルチテナントの ASP.NET MVC Web アプリケーションを開発しています。各テナントには独自のデータベースがあります。データ アクセスは、エンティティ フレームワークによって管理されます。StructureMap は IoC コンテナーとして使用されています。エンティティ フレームワークのデータ コンテキストは、http リクエスト スコープで設定されています。リクエストごとにテナントが作成され、StructureMap はエンティティ フレームワークのデータ コンテキストとリポジトリ クラスの新しいインスタンスを返します。

Web アプリのスタートアップ クラス (IProcessHostPreloadClient の実装) で、エンティティ フレームワークを初期化したいと思います。構成されたテナントごとに、データ コンテキストの新しいインスタンスをループして作成する必要があります。これについて最善の方法は何ですか?StructureMap は、http/thread スコープでキャッシュするように設定されているのと同じデータ コンテキストを返します。

ありがとう、ハルシャ

4

1 に答える 1

1

テナントに基づいて接続文字列を変更するだけの場合は、次のように動作するはずです。

For<Tenant>().Use(c => c.GetInstance<TenantFactory>().CreateTenant());
For<DbContext>().Use(c => new DbContext(
    ConfigurationManager.ConnectionStrings[c.GetInstance<Tenant>().ConnectionName]
        .ConnectionString));

クラスは現在のTenantテナント接続文字列名を保持する必要があり、接続文字列を決定するために使用する方法に関係なくTenantFactory、適切なTenantunsing が作成されます。

より広範なバリエーションの場合は、マルチコンテナー アプローチの方が適している可能性があります。

于 2013-03-23T20:57:10.780 に答える