I’m looking for a design approach, so I don’t have any code to share.
I have a WPF rich-client application that presents detail data to the user. When the user clicks “Edit” The entire form goes into edit state. This reveals a couple of “Add” buttons. These “Add” buttons open child views providing the user with tools to create new entities. Think “adding a new item to a customer order you’re working with”. That’s the easy part.
When the user closes these child views, the new entities must be displayed and editable in the parent view for continued detailed editing. Something like “add the new item on the child form, pick the part number, then close the child and add quantity and delivery date on the parent view. I don’t have any flexibility in this workflow. I have this working also.
When the user is finished with the parent view and is satisfied with the newly added items and detail edits they can click “Save”. That is when all the changes need to go back to the database. If the user clicks cancel, all the changes including entities created on the child views must disappear, and the form returned to it’s original state.
It’s that last bit that stumps me. I’m almost new to Entity Framework, so I thought I could somehow keep the entire set of changes in memory on the client and commit all the changes to the database at the point of user-Save. I don’t know if that’s possible, or how I have to impliment my data changes to prevent accidental trips to the database.
To put all the facts on the table, I’m using a unit of work pattern, but I have access to an EF context object, if needed. If I have to work with the context object, I must do so across several views and their associated view-models.
I’ve looked at a whole lot of stackoverflow Q&A but cannot find, or perhaps recognize, a solution path. I’ve some ideas about using cloned entities, or perhaps transactions, but do not know if there are others or how to choose between them. These would be new skills and require time spent learning. I am willing to spend time learning a new skill, but not learning and trying three or four.
I’m grateful for any advice you might offer.
On the constructor when read from the DB record the value twice. One private variable for current and one for Old.