Committing changes to the database using Entity Framework

10,737

More or less you already have the solution. You just need to check if your Single call which tries to load the object from the DB has an result or not (use SingleOrDefault instead). If the result is null you need to insert, otherwise update:

foreach (var TableOBJECT in collectionOfYourTableOBJECTsTheUserWorkedWith)
{
    var objectInDB = entities.TABLEA
        .SingleOrDefault(t => t.NAME == TableOBJECT.NAME);
    if (objectInDB != null) // UPDATE
        entities.TABLEA.ApplyCurrentValues(TableOBJECT);
    else // INSERT
        entities.TABLEA.AddObject(TableOBJECT);
}
entities.SaveChanges();

(I'm assuming that NAME is the primary key property of your TableOBJECT entity.)

Share:
10,737
Dan
Author by

Dan

I'm a computer scientist currently programming with C#, C++, HTML, JavaScript and CSS. I enjoy web development. -Dan

Updated on June 09, 2022

Comments

  • Dan
    Dan almost 2 years

    I have a situation where I pull data from a table by date. If no data is supplied for a given date I create a record using default values and display it all to the user. When the user is done manipulating the data I need to commit the changes.

    So my question is how do I handle in Entity Framework submitting a table where there could be both updates and adds that need to be done. This is in C# using MVC3 and Entity Framework.

    So here's what the data might look like to start,

    Table A

    NAME  AGE PHONE_NUM 
    Jim   25  555-555-5555 
    Jill  48  555-551-5555
    

    After the users done with the data it could look like this,

    Table A

    NAME  AGE PHONE_NUM
    Jim   25  555-555-5555
    Jill  28  555-551-5555
    Rob   42  555-534-6677
    

    How do I commit these changes? My problem is there are both updates and inserts needed?

    I've found some code like this but I don't know if it will work in this case.

    For adding rows of data

    entities.TABlEA.AddObject(TableOBJECT);
    entities.SaveChanges();
    

    or for updating data

    entities.TABLEA.Attach(entities.TABLEA.Single(t => t.NAME == TableOBJECT.NAME));
    entities.TABLEA.ApplyCurrentValues(TableOBJECT);
    entities.SaveChanges();
    

    Will any of this work or do I need to keep track of whats there and what was added?

    Ideas?