2

ソリューションにはDAL、BOL、UI、Modelの4つのプロジェクトがあります。EF 4.xを使用してレイヤーasp.net Webアプリケーションでdbcontextを管理する方法

モデルにはPOCOクラスが含まれています.DALにはモデルが導入されたDbContextクラスが含まれています。すべてのプロジェクトにはモデルプロジェクトへの参照があり、UIにはBOLへの参照があり、BOLにはDALへの参照があります。

データを保存する現在の方法は次のとおりです。 [Submit]ボタンを押した後のUIで、フォームのデータがモデルPOCOクラスに格納され、BOLがdbcontextのインスタンス化時にPOCOクラスがBOL saveメソッドに移動しますまたインスタンス化し、saveメソッドはそのdbcontextを使用して変更をサブミットします。

質問:このようなdbcontextのインスタンス化は効率的ですか?パフォーマンスを向上させるために他の何かを行うべきですか?同時に多くのレコードがデータベースに挿入される可能性があるため、可能な限りパフォーマンスを上げようとしています。

+0

複数のレコードを1つの作業単位として挿入する場合は、1つのコンテキストインスタンスを使用することが理にかなっています。しかし、大規模な並行処理(_at a same time_)を参照している場合は、各呼び出しにはそれぞれ独自のコンテキストがあります。どちらの意味がありますか? –

+0

それは一般的にする方が良いです。私は、プログラマのためにメソッドやクラスを下位層に構築するつもりです。そのため、データを挿入/更新/削除/ロードするために上位層から呼び出すことができます。彼らは接続、dbcontexts、について心配する必要はありません...とだけビジネスに焦点を当てる必要があります。 あなたのコメントによると、BOLコンストラクタでdbcontextをインスタンス化するのは正しいですが、同時に複数のレコードを挿入する必要がある場合、プログラマはBOLのインスタンスを1つ使用する必要があります。 あなたは投稿の返信としてこの提案を返信することができます。回答としてマークします。 – Saber

+0

OKですが、私はあなた自身の考えと精緻化だと思いますので、あなた自身の質問に答えて(Stack Overflowでうまくいけば)気分が良くなり、受け入れられたとマークします(2日後に可能です)。 –

答えて

0

DbContextとEFはADO.NET接続メカニズムを使用してデータベースに接続しているため、ADO.NET接続プーリングなどを使用しています。つまり、必要以上にDBContextを開いたままにしたくない場合は、接続プールからの接続を保持し、接続がアイドル状態になることが多いためです。必要な時にいつでもusingステートメントでDBContextを作成してください。

+0

BOLクラスでは、データベースに接続する3つのメソッドがあるかもしれませんが、それぞれのメソッドでusingステートメントを使用する方がよいでしょうか? メソッドを呼び出すことによって100個のレコードを挿入したい場合は、 "using"ステートメントを含むメソッドと新しいdbcontextを作成するたびにそのメソッドを呼び出す方が効率的ですか? – Saber

関連する問題