3

次のようなフォームを持つWindowsフォームアプリケーションがあります。

  • MainForm
  • FirstForm
  • SecondForm
  • ..。

メインフォームは最初から始まり、アプリケーションが存在した後に終了します。フォームごとに1つのコンテキストを使用する場合、メインフォームの有効期間は長くありませんか?フォームごとに1つのコンテキストで発生する2番目の問題は、常に切り離されたエンティティを処理する必要があることです。

編集: 私は常に次のようなエンティティを再接続する必要があります:

_context.MyEntities.Attach(existingEntity1);
_context.MyEntities2.Attach(existingEntity2);

existingEntity1.MyEntities2.Add(existingEntity2);

_context.SaveChanges();

それは私には少し奇妙に見えます。

ライフタイム処理のベストプラクティスは何ですか?フォームごとに1つのコンテキストを使用する場合、切り離された問題をどのように解決できますか?

これで、データバインディングは次のようになります。

var myEntities = from e in _context.MyEntities
                 select e;

var bindingList = new BindingList<MyEntity>(myEntities.ToList());
myGridView.DataSource = bindingList;

MainForm、FirstForm、およびSecondFormには同じバインディングリストが必要ですが、異なることを行うとしましょう。バインディングリストを共有するためのベストプラクティスは何ですか?

4

2 に答える 2

1

推奨事項はフォームごとのコンテキストです。ただし、複数のフォームで同じコンテキストを使用することで、同じエンティティで作業する場合の開発の高速化やパフォーマンスの向上などの利点が得られ、それが長期にわたるリスクを上回る場合コンテキスト -- 読み込まれたエンティティが多すぎて同時実行の問題がある場合 -- 次に、複数のフォームでコンテキストを使用します。おそらく、親フォームに別のイベントがあり、それを使用してコンテキストの廃棄と再作成をトリガーし、問題が発生した場合にその有効期間を短くすることができますか?

もう 1 つのオプションは、フォームを変更して、より多くの共通エンティティを操作する必要がなく、独立したエンティティが少なくなるような、より個別の作業単位を表すことができるかどうかを評価することです。

于 2013-01-07T10:23:55.230 に答える
0

編集:コメントに記載されているように、この回答は Microsoft の現在の推奨事項ではありません。複雑なオブジェクト モデルや、モデルがコンテキストから切り離されている場合に適している可能性があります。

最初の質問については、コンテキストが長すぎると思います。通常、短い寿命の方が優れています。

2 番目の質問については、切り離されたエンティティを頻繁に扱っている場合は、セルフ トラッキング エンティティを調べます。

3 番目の質問については、データで何をしているかによって異なります。読み取り専用の場合は、同じデータを同じインスタンスにバインドしても問題はありません。更新用の場合は、ビジネス ドメインによって異なります。場合によっては、データを「複製」して、データを分離しておくことを検討できます。しかし、すべてのフォームが同じバージョンのデータを表示するように、各フォームが同じ単一のインスタンスを参照することも理にかなっています。1 つのフォームの変更は他のフォームにも反映されます。どちらの場合でも、セルフ トラッキング エンティティはうまく機能します。

WPF app での Self Tracking Entitiesの使用を示すサンプルがあります。

于 2013-01-06T13:18:31.403 に答える