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.
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.
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With