I've learning ASP.Net and Entity Framework 4 by a practical example. To trial this, I'm using the example of User
sending in devices for Repair
. They create an account online, add in a set of Details
(address, phone, fax etc), and create the return form (RMA
) online.
The concept I am struggling with, is assigning Details
to the Returns
. A Return
has a set of Details
, one for contact, delivery and billing. These can be foreign keys to the Detail
table, as shown below.
The problem is, that if a User
edits their Details
online, it will update the Details
used on the Return
. This is not the desired behaviour. The Return
should uses the Details
which were available at the time it was created.
The question is, how do you make the entity framework create a new Detail
object, instead of updating the existing one. That is if the user updates Detail
23 with a new postcode, Detail
23 is not changed, instead a new Detail
is created (i.e. 45). Detail
23 is removed from the User
, and the new Detail
45 is added to the User
. Whilst an existing RMA
using Detail
23 is unaffected, meanings if you query the RMA
you get the details which were supplied at the time it was created.
If on reading this question, you think the concept is flawed, and instead the DB should be designed differently (i.e. copying Detail
data to columns in RMA
table, or adding in a form of composite key to Detail
table to create a history of revisions). I'm happy to listen to those wise words as well.