質問: "Company 1" + entity.DisplayName(); } } ``` それは完璧に機能していますが、ユーザーが間違った会社を選択したり、システムからログアウトして別の会社にログインしたりすると、OnModelCreatingが再び呼び出されることはなく、dbContextを再設定することはできません。 すべての要求に対してOnModelCreatingを強制することは可能ですか? または、dbContextの初期化後にテーブル名を変更しますか? ありがとう!
回答: それは間違った方法です。 `OnModelCreating`は、EFがクラスからモデルを作成または記述するときに実行されます。リレーションの検証、実際のDBとの比較(そして、マイグレーションが必要かどうかの確認など)など、多くのリフレクションとタイプの操作がここにあります。あなたは本当にすべての要求にこのすべてのものを実行する必要がありますか? 要求ごとにDbContextを再作成しないでください。いくつかのDbContextを作成し、要求の開始時にそれらのうちの1つ(1回作成!)を選択します。 例えば: 主なDbContext抽象を作成し、必要な数だけCompanyXDbContextを作成します。それらはすべて基本クラスから継承し、単純なテーブル接頭辞を(ctor内で)提供します。 あなたのコードのどこでも、DbContextが必要なときはDIから抽象/基底クラスを求めます。 `Startup`に抽象DbContextをファクトリメソッドで登録し、現在の`Request`変数/パラメータに応じて実際のものを選択したり、現在のリクエストに基づいて正しいインスタンスを作成するカスタムミドルウェアを作成したりします。 CompanyXがたくさんある場合、事前にコーディングされた多くのCompanyXDbContextクラスの代わりに何か別のものが必要かもしれません。ランタイムクラスを作成するものがあるかもしれないし、ジェネリックかもしれません...しかし、主なアイデアは変わりません。すべてのリクエスト。