QuantumHive QuantumHive - 1 year ago 296
C# Question

Entity Framework 6: Clone object except ID

In my MVVM program I have a Model class (say

) from which I have an instance of reading from the database (using Entity Framework). When retrieving the object I'm presenting all the data to the user. Later on the user will be modifying some fields.

What I want is to create the same object except for it's
(since that
is the primary key and auto incremented).

So how could I approach this? I don't want to copy all fields one by one, this is not a robust approach. Because perhaps in the future the model may be modified, so this way I will have to take that into account in the cloning method.

So is there any elegant way to copy the object and when saving in the database, it's ID gets auto incremented again? (Setting the ID to
gives me a compiler error, because it's of type

Answer Source

I noticed that there is no need for copying. Apparently when adding an instance of a model to the database (even if the ID is set to one that already exists in the database), Entity Framework inserts a new row in the database and auto-increments it's primary key. So this functionality is already built-in into EF. I didn't know this, sorry.
Just for clarity's sake here is an example:

using(var database = new MyDbContext()) {
    MyModel myModel = database.Where(m => m.SomeProperty == someValue);
    myModel.SomeOtherProperty = someOtherValue; //user changed a value
    database.MyModels.Add(myModel); //even though the ID of myModel exists in the database, it gets added as a new row and the ID gets auto-incremented 
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download