質問: Entity Framework Code Firstを使用してマルチテナントアプリケーションを開発しています。各テナントはデータベース内に異なるスキーマを持ちますが、アプリケーションはすべてのテナントに対して単一のコンテキストとモデルを持ちます。 Entity Framwork 6は、同じデータベース内の複数のコンテキストを持つ複数のスキーマを使用できますが、単一のコンテキストで複数のスキーマを使用する方法はありませんでした。 私は、デフォルトの "dbo"スキーマへの(コマンドラインによる)マイグレーションを生成しました。これらの移行を使用して他のスキーマを更新したいと思います。
回答: 私は複数のコンテキストが絶対に良い方法であることに同意しますが(私自身のプロジェクトの設定方法もあります)、私は単一のコンテキストで複数のスキーマを使用する方法に関する最初の質問に答えたいと思っていました。 各モデルのマッピング設定の中で、 'ToTable(myTableName、mySchema)'を呼び出して、テーブルが属するスキーマを変更することができます。 ``` public class MyEntityMap : EntityTypeConfiguration { public MyEntityMap () { HasKey(t => t.MyId); Property(t => t.MyId) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); ToTable("MyEntity", "MySchema"); } } ``` これにより、単一のコンテキストを維持しながら、各テーブルのスキーマを個別に設定できます。 異なるスキーマで同じモデルを使用して、セットアップについてもっと知らなくてももう少し難しいと述べたからです。少数の顧客しか扱っておらず、スキーマをコードで維持しても構わない場合は、上記のように各スキーマのマップを作成し、各顧客に新しいDbSetを追加するだけです。このスケーラビリティを大量の顧客にまで拡大しようとしている場合は、各テーブルでcustomerID列を使用するのとは対照的に、異なるスキーマで100以上の同一のテーブルを見るとdbaが悲鳴を上げる可能性があるため、 。