背景: 私たちはオンライン製品を販売しており、各顧客は独自のデータベースを取得していますが、共有サービスを使用しています。
古い ADO.NET の代わりに EF6 を使用したいのですが、私の知る限り、dbcontext の作成時にデータベースを変更することはできず、クエリごとに新しい dbcontext を作成するにはコストがかかりすぎるのではないかと心配しています。
そして、1000 以上の dbcontext をキャッシュすることは、非常に悪い解決策のように思えます。
背景: 私たちはオンライン製品を販売しており、各顧客は独自のデータベースを取得していますが、共有サービスを使用しています。
古い ADO.NET の代わりに EF6 を使用したいのですが、私の知る限り、dbcontext の作成時にデータベースを変更することはできず、クエリごとに新しい dbcontext を作成するにはコストがかかりすぎるのではないかと心配しています。
そして、1000 以上の dbcontext をキャッシュすることは、非常に悪い解決策のように思えます。
これは実際にはかなり簡単に行うことができます
public class MyContext : DbContext{
public MyContext(string connectionStringName): base(connectionStringName){}
}
また
public class MyContext : DbContext{
public MyContext(DbConnection connection): base(connection, contextOwnsConnection: true){}
}
接続プーリングは、1000以上の接続文字列ではうまく機能しません。各データベースに1つのプールがあり、その結果、膨大な量の接続が行われます。
最初にダミーのデータベースに接続してからDbConnection.ChangeDatabase
、正しいデータベースに変更するために使用することをお勧めします。EF はそれに気付かず、問題なく動作します。
をキャッシュする必要はありませんDbContext
。軽量です。
次に行うことができます:
public class BaseContext<TContext> : DbContext where TContext : DbContext
{
protected BaseContext(): base("name=DbName")
{
}
}
そして、それは次のように使用します:
public class StatusContext : BaseContext<StatusContext>
{
....
}
BaseContext から継承するすべてのコンテキストは、同じデータベースを使用します。