全て、
UI(Win Form Application)のフォームにエンティティオブジェクトのリストを渡して編集する方法(アルゴリズム)を考えようとしています(たとえば、グリッドでは-これには関係ありません-これは私が望む概念です確立する)。フォームは、FormEditという名前で、[OK]、[キャンセル]、[適用]ボタンがあります。
私のエンティティには、例として次の階層があります。
Class Entity1
...
Entity2List As EntityCollection(Of Entity2)
...
End Class
Class Entity2
...
SomeValue As String ' This would be a field in my entity mapping to the database
...
FormEditで編集したいEntity2Listです。
FormEditは、Entity2Listを渡すメインフォームからトリガーされます。メインフォームには、context.SaveChanges()を実行する[保存]ボタンがあります。メインフォームが初期読み込みを行います。
[OK]をクリックすると、変更が保持され、FormEditが閉じます。[適用]をクリックすると、変更が保持されます。[キャンセル]をクリックしたら、FormEditで行われた編集をすべて無視して閉じ、FormEditが読み込まれたときのEntity1.Entity2Listを初期状態にします([適用]をクリックした場合を除く-以下のシナリオを参照)。
これで、FormEditに何度もアクセスできるようになったため、行った変更はすべてそのフォームの範囲内にある必要があります。したがって、次の初期状態を前提として、次のことを行うとします。
Entity1には単一のレコード/行/オブジェクトがあります。Entity1.Entity2Listには、次の2つのレコード/行/オブジェクトが含まれています。
Record1: SomeValue = 33
Record2: SomeValue = 10
シナリオ1
- アプリケーションの開始-メインフォームにロードされたエンティティ。
- [編集]ボタンをクリックして、Entity1(Instance).Entity2Listをパラメーターとして受け取るFormEditの表示をトリガーします。
- グリッドに新しい行を追加します。これにより、Entity1.Entity2Listに行が追加されます。
- Record1を変更し、SomeValueを33から100に変更します。
- [キャンセル]をクリックします。これにより、Entity1.Entity2Listが初期状態に戻るはずです。
シナリオ2
- アプリケーションの開始-メインフォームにロードされたエンティティ。
- [編集]ボタンをクリックして、Entity1(Instance).Entity2Listをパラメーターとして受け取るFormEditの表示をトリガーします。
- Record1を変更し、SomeValueを33から100に変更します。
- [適用]をクリックします。
- Record1を変更し、SomeValueを100から-9に変更します。
- [キャンセル]をクリックします。これにより、手順5で行った変更が元に戻ります。手順3で行った変更は、[適用]をクリックしたときに記憶されます。
このような変更を追跡するための何らかのメカニズムが必要です。[OK /適用]をクリックすると、コンテキスト上のオブジェクトに変更が加えられます。
これを行うためのアプローチはありますか?すべてのアイデアや提案を歓迎します。
乾杯、
アンデス