1

私はObjectContextEntityFrameworkを初めて使用し、「データベースファースト」のWinFormアプリケーションのライフサイクルについて質問があります。

説明のために、私が動物種の登録簿を作成しているとしましょう。

  • フォームの左側には、動物の種のリストがあります(牛、豚、犬など–これらは種ではなく属だと思いますが、気にしないでください!)。

  • フォームの右側には、選択した種のプロパティを表示および編集できるテキストボックス、コンボボックスなどがあります。

ユーザーが左側の種を選択するとき、私は使用します:

var species = context.Single(x =>  x.id == speciesID);

次に、右側のさまざまなコントロールをにバインドしspeciesます。

生息地などのこれらのプロパティの一部は、コンボボックス(フォームの読み込み時にデータベースから入力されます。データベースで代理キーを使用しています)から選択されます。つまり、フォームの存続期間中、同じコンテキストを維持する必要があると思います。

これには2つの問題があると思います。

  1. ユーザーは、コンテキストの存続期間中に多くの異なる種(数百が存在する)に変更を加えて、それを肥大化させる可能性があります。

  2. 理想的には、変更する前に現在の種(汚れている場合)への変更を保存したい場合は、新しい種を選択するときにユーザーにプロンプ​​トを表示したいと思います。次に、変更を破棄するにはどうすればよいですか?オブジェクトを見たことをコンテキストに忘れさせるにはどうすればよいですか?

別の方法は、ユーザーが新しい種を選択するたびに新しいコンテキストを使用することですが、これは、同じコンテキストで作成され、バインドできるように、毎回複数のコンボボックスを再作成することを意味します。

私は何かが足りないのですか?

どうもありがとう

4

2 に答える 2

0

種の変更に新しいコンテキストを使用することをお勧めします。これにより、必要に応じて変更を元に戻す問題が解決されます。

コンテキストを破棄するたびにコンボボックスを再入力する必要がある理由がわかりません。これらのエンティティは、種が変更されると同時に変更されないことを前提としています。したがって、これらのエンティティでAttachメソッドを使用して、現在のオブジェクトコンテキストの一部にすることができます(または、選択したエンティティのキ​​ー/ IDを使用して、現在のオブジェクトコンテキストでデータベースからエンティティをクエリできます)。

于 2013-01-29T10:05:10.173 に答える
0

このトピックで答えが見つかると思います。

エンティティ フレームワーク エンティティの変更を元に戻す

于 2013-01-29T09:48:20.670 に答える