dor
dor

Reputation: 105

EF code first update entity with its children

I got update method that updates only the entity without its children

    public void Update(T obj)
    {
        Ensure.IsNull(obj);

        using (var DB = AccessManager.db)
        {
            DB.Set<T>().Attach(obj);
            DB.Entry(obj).State = System.Data.EntityState.Modified;
            DB.SaveChanges();
        }
    }

I try to update

LessonModel.Title = "Updated";
LessonModel.Files.Add(new LessonFileModel { IdxNumber = LessonModel.IdxNumber, FileName = "asd", FilePath = " asdf" });
DALFacade.Lesson.Update(LessonModel);

Only the title gets updated. The files are not updated.

So if the method like this:

    public void Update(LessonModel obj)
    {
        Ensure.IsNull(obj);

        using (var DB = AccessManager.db)
        {
            DB.Lessons.Attach(obj);
            DB.Entry(obj).State = System.Data.EntityState.Modified;
            DB.SaveChanges();
        }
    }

How can i save the child?

Upvotes: 1

Views: 189

Answers (1)

Frank
Frank

Reputation: 4481

This is one of the problems that arise when you use the "Generic Repository" anti pattern. Writing an Update method that works for every combination of entity graphs that you pass in and will always do exactly what you want it to do is a big pain in the EF.

Instead, try writing repositories that match your use cases.

Your current problem could be solved if you added the files to the lesson after you attached it to the context. Marking an entry as modified marks all properties on this entry as modified, it doesn't affect relationships.

Upvotes: 3

Related Questions