この流れるような API を試しましたmodelBuilder.Entity<Report>().ToTable("Reporting");
か? 接続先のデータベースに基づいて条件付きでこれを行うように、これを記述する必要がある場合があります。「DatabaseA はこのマッピングと接続文字列を使用する」、「DatabaseB はこの他のマッピングと接続文字列を使用する」と言うことができるように構成する必要がある場合があります。接続文字列を変更するのではなく、名前/キーでデータベースを指定します。であり、アプリはその名前を検索して、実行するマッピング コードを決定します。
if(dbMappingconfig == DbMapping.A)//some enum you create
{
modelBuilder.Entity<Report>().ToTable("Reporting");
}
これらのエンティティを DisplayReport(Report r) などの他のメソッドに渡してコードを複製する必要がないようにすることが目標の場合は、Reporting クラスと Report クラスの両方に IReport インターフェイスを実装することができます。
EF は継承階層もサポートしているため、同じクラスから継承させることもできますが、データベース間で機能しないという強い思いがあります。
OnModelCreating が再実行されない場合は、既にキャッシュされている可能性があります。modelBuilder.CacheForContextType = false;
今後キャッシュしないようにそこに入れ、現在のキャッシュをクリアするには、Clean + Rebuildを実行するだけでよいと思います。これには、キャッシュを再利用する代わりに毎回モデルを再構築するという代償が伴います。本当に必要なのは、接続文字列が変更されるまでキャッシュを使用することです。とにかくキャッシュを手動でクリアする方法はわかりませんが、方法があるかもしれません。モデルの構築を自分で管理できます。
DbModelBuilder builder = new DbModelBuilder();
// Setup configurations
DbModel model = builder.Build(connection);
DbCompiledModel compiledModel = model.Compile();
DbContext context = new DbContext(connection, compiledModel);
ただし、キャッシュを自分で管理する必要があるため、複雑さが増します。
これを検索しているときに、同じページを下っただけでなく、同じことを達成しようとしているように見えるこれに出くわしました。問題の最終セクションを参照してください:エンティティフレームワークモデルをテーブル名に動的にマップする方法