Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The entity type List`1 is not part of the model for the current context

I've been using Database First, EF 4.1

I am getting "The entity type List`1 is not part of the model for the current context." error when trying to update a record from my Edit View.

The error is occurring at

db.Entry(properties).State = EntityState.Modified;

Here is my Model:

public class Users
     {
     [Key]
     public int User_ID { get; set; }
     public string UserName { get; set; }

     [NotMapped]
     public IEnumerable<App_Properties> User_Properties
     {
          get { return Properties.Where(u => u.User_ID == User_ID); }
     }

     public virtual ICollection<App_Properties> Properties { get; set; }
}

public class App_Properties
{
     [Key]
     public int Prop_ID { get; set; }
     public int User_ID { get; set; }
     public int App_ID { get; set; }
     public string Key { get; set; }
     public string Value { get; set; }
     public DateTime DateEntered { get; set; }
     public DateTime DateModified { get; set; }

     [ForeignKey("User_ID")]
     public virtual Users Users { get; set; }
}

Here is my Controller:

[HttpPost]
public ActionResult Edit(ICollection<App_Properties> properties)
{
     if (ModelState.IsValid)
     {
          foreach (var item in properties)
          {
               db.Entry(properties).State = EntityState.Modified;
          }

          db.SaveChanges();

          return RedirectToAction("Index");
     }

     return View(properties);
}

I suspect the foreach loop is not appropriate in setting the EntityState for each item in an ICollection.

Any assistance would be greatly appreciated.

like image 546
Isaac Vallee Avatar asked Mar 27 '12 19:03

Isaac Vallee


2 Answers

Try changing your loop to:

foreach (var item in properties) {      db.Entry(item).State = EntityState.Modified; } 

You were calling db.Entry(properties), so you were trying to attach the whole collection at once. DbContext.Entry(object) expects a single object, not a collection.

like image 119
Leniency Avatar answered Oct 04 '22 15:10

Leniency


Thanks, Leniency, for the answer. Worked great.

For what it's worth, I prefer to keep my EntityState.Modified assignments on a single line (as I have multiples) so used the following LINQ:

properties.ForEach(p => db.Entry(p).State = EntityState.Modified); 
like image 40
Jonathan Avatar answered Oct 04 '22 16:10

Jonathan