Tom
Tom

Reputation: 71

db.SaveChanges does not save changes

Can somebody help me out with db.SaveChanges? It is not saving changes made to an object. I have added project model.

public class Project
    {
        public int ProjectID { get; set; }        
        public String Name { get; set; }    
        public virtual ICollection<ProjectParam> ProjectParams { get; set; }       
    }    



// Project object
Project project = new Project { Name = ProjectName, ProjectID = ProjectID };
project.ProjectParams = new List<ProjectParam>();

// Update all params
for (int i = 0; i < ParamIDs.Length; i++)            
    project.ProjectParams.Add(new ProjectParam { ParamID = Convert.ToInt32(ParamIDs[i]), 
                                                 ParamValue = ParamValues[i],
                                                 ProjectID = ProjectID });

// Save changes
if (ModelState.IsValid)
{
    db.Entry(project).State = EntityState.Modified;                               
    db.SaveChanges();

    return RedirectToAction("Index");
}

return RedirectToAction("Index");

Upvotes: 0

Views: 5708

Answers (2)

Tom
Tom

Reputation: 71

This is what i did to resolve this. This seems working fine. Thanks everyone for your time.

public ActionResult Edit(int ProjectID,string ProjectName,string[] ParamIDs,string[] ParamValues)
        {
            // Get project from context
            Project project = db.Projects.Where(e => e.ProjectID == ProjectID).SingleOrDefault();
            project.Name = "Hi";

            // Remove existing parameters
            db.ProjectParams.RemoveRange(db.ProjectParams.Where(c => c.ProjectID == ProjectID));

            // Add new list of parameters
            project.ProjectParams= new List<ProjectParam>();

            //// Update all params
             for (int i=0;i< ParamIDs.Length;i++)
                project.ProjectParams.Add(new ProjectParam { ParamID = Convert.ToInt32(ParamIDs[i]),ParamValue=ParamValues[i],ProjectID=ProjectID });

            // Save changes
            if (ModelState.IsValid)
            {
                db.Entry(project).State = EntityState.Modified;                               
                db.SaveChanges();

                return RedirectToAction("Index");
            }
            return RedirectToAction("Index");            
        }

Upvotes: 0

MStew
MStew

Reputation: 1275

Before you set the Entry.State and call SaveChanges(), attach the project to your Project entity like so:

db.Projects.Attach(project);
db.Entry(project).State = EntityState.Modified;                               
db.SaveChanges();

Upvotes: 2

Related Questions