データコンテキストの推奨される寿命について読んでいますが、それでも最良のオプションについては疑問があります。
一般に、私が見ている結論は、デスクトップアプリケーションでは、データコンテキストの存続期間はフォームの存続期間であり、WCFアプリケーションでは、存続期間はセッションの存続期間である必要があるということです。
その理由は、私が理解しているのは、データコンテキストの寿命は、コンテキストの作業単位の利点を得るのに十分な長さである必要がありますが、その利点を失うほど大きくはないからです。
ただし、たとえば、データベースからデータを読み取り、データコンテキストがデスクトップアプリケーションのフォームのプロパティとして作成されている場合、変更を行うと、データコンテキストのエンティティの値を変更するだけで済みます。 savechanges()メソッドを呼び出し、EFがデータコンテキストに変更を保存します。したがって、データベースとのやり取りは2つあり、1つはデータを取得するためのもので、もう1つは変更を保存するためのものです。
ただし、このようにすると、データコンテキストが非常に大きくなる可能性があり、同時実行の問題が発生する可能性も高くなります。つまり、データを読み込んで変更を加えて保存するため、他のユーザーが情報を変更する時間があります。
操作ごとにデータコンテキストを使用する場合は、disposeのデータコンテキストでデータを読み取り、ローカル変数の情報に変更を加えてから、変更を保存するときに、他のデータコンテキストを使用する必要があります。エンティティの場合、ローカル変数からエンティティに情報を渡すためにエンティティを検索してから、変更を保存する必要があります。
この場合、データベースとのやり取りが3つあるため、効率が低下し、データベースはより多くの作業を行う必要があります。1つは結果を取得してローカル変数に情報を渡すためのもので、もう1つは結果を再度取得してローカル変数からコンテキストに情報を渡し、最後に変更を保存するためのものです。また、ローカル変数から新しいコンテキストに変更を渡すために、2番目のデータコンテキストでエンティティを検索するために追加の作業を行う必要があります。
ただし、2番目のデータコンテキストでのデータのロードとローカル変数からコンテキストへの変更の受け渡しの間に経過した時間のみであるため、同時発生の問題が発生する可能性は低くなります。
では、デスクトップアプリケーションとWCFアプリケーションで、データコンテキストを操作するのに最適なオプションはどれですか?おそらく私はデータコンテキストの間違った使用をしていますか?
おそらく、2番目のアプローチを使用し、ローカル変数もエンティティである場合、2番目のデータコンテキストを作成できます。データベースからエンティティを読み込む代わりに、ローカルエンティティを直接追加し、状態を変更して追加、変更、または削除できます。そして、データコンテキストは変更を保存できますか?