Тип объекта List`1 не является частью модели для текущего контекста
Я использую Database First, EF 4.1
Я получаю "Список типов объектов" 1 не является частью модели для текущего контекста ". при попытке обновить запись из моего Edit View.
Ошибка происходит при
db.Entry(properties).State = EntityState.Modified;
Вот моя модель:
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; }
}
Вот мой контроллер:
[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);
}
Я подозреваю, что цикл foreach не подходит для установки EntityState для каждого элемента в ICollection.
Любая помощь будет принята с благодарностью.
Ответы
Ответ 1
Попробуйте изменить свой цикл на:
foreach (var item in properties)
{
db.Entry(item).State = EntityState.Modified;
}
Вы звонили db.Entry(properties)
, поэтому вы пытались сразу прикрепить всю коллекцию. DbContext.Entry(object) ожидает единственный объект, а не коллекцию.
Ответ 2
Спасибо, Leniency, за ответ. Отлично.
Для чего это стоит, я предпочитаю сохранять назначения EntityState.Modified
в одной строке (поскольку у меня есть кратные), поэтому использовал следующий LINQ:
properties.ForEach(p => db.Entry(p).State = EntityState.Modified);