2011-03-03 11 views
1

WinFormsのアプリケーションと請求書作成の例を挙げてください。請求書フォームでは、製品の一覧を取得するので、ユーザーは現在の請求書の製品を選択することができます。また、このプロセス中に、ユーザーは新しい商品をProductListに追加してから請求書に入れる必要があることを認識しています。そこで、彼はすべての製品が再び検索されるProductFormを開きます。 逆の順序でも、ユーザーが最初に商品を編集した後、商品フォームを閉じることなく新しい請求書を開くことができます。原則として、データは2回ロードされ、実質的に同じデータがロードされます。異なるフォームの共通データを取得する

このシナリオを処理するにはどのような方法がありますか。データがすでに読み込まれていることを1つのフォームに伝え、メモリからそのデータを取得することができますか?そして、データのすべての消費者(フォーム)が閉じられると、データもメモリから解放されますか?それとも、私は間違った方向に行き、よりよい方法がありますか?データを使用しているコントロールは共有親コントロールのすべての子コントロールがある場合、それらすべてが同じのDataContextを共有するよう

おかげで、 ゴラン

答えて

1

Definitelly "2倍"のデータが読み込まれると、さらに深刻な問題が発生します。

共有データとは、ObjectContextを共有することを意味します。 WinFormsアプリケーションでさえ、これは悪いアプローチとみなされます。 this articleをチェックしてください(NHibernateについてですが、説明はEFでも有効です)。

問題は、ObjectContextが作業単位であることです。 2つのウィンドウ間でコンテキストを共有すると、最初のウィンドウでデータを保存することなく(保存せずに)データを簡単に変更でき、セーブボタンを押す2番目のウィンドウに進みますが、両方のウィンドウからデータを保存します。コンテキストを共有すると、1つのウィンドウからのみデータを選択的に保存することはできません。

1

は、その後、あなただけの、DataContextの周りを渡すことができます。

しかし、ほとんどの場合、EFをサポートしているデータベースの一般的な使用例は、必要なときにいつもデータを読み取ることです。

あなたが既に1つのフォームで使用されているアイテムを持っていると言っても、そのアイテムのRefrenceを新しいフォームに入れるだけで解決できます。

したがって、商品リストを持つ請求書があり、商品リストに追加する場合は、請求書の商品リストを開始商品リストに渡すことができます。

これでいくつかの問題があります:1は(別名同時実行)彼らは変更を行った可能性がシナリオを保存しない保存処理

  • を、それを開いている間に、別のユーザーがデータソースを変更した場合

    • は、実際にはデータに追加しない1つの領域です。

    ただし、実際のパフォーマンスの問題でない限り、毎回データを読み込むだけです。リポジトリパターンを使用することでこれを簡単にすることができます。そのため、単一のメソッドを呼び出して、製品や請求書のリスト、または必要なデータの一部を取得することができます。

  • 関連する問題