实体类型List`1不是当前上下文的模型的一部分

我一直在使用Database First,EF 4.1

我得到“实体类型List`1不是当前上下文模型的一部分。” 尝试从“编辑视图”更新记录时出错。

错误发生在

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

这是我的模型:

 public class Users { [Key] public int User_ID { get; set; } public string UserName { get; set; } [NotMapped] public IEnumerable User_Properties { get { return Properties.Where(u => u.User_ID == User_ID); } } public virtual ICollection 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 properties) { if (ModelState.IsValid) { foreach (var item in properties) { db.Entry(properties).State = EntityState.Modified; } db.SaveChanges(); return RedirectToAction("Index"); } return View(properties); } 

我怀疑foreach循环不适合为ICollection中的每个项设置EntityState。

任何帮助将不胜感激。

尝试将循环更改为:

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

您正在调用db.Entry(properties) ,因此您尝试立即附加整个集合。 DbContext.Entry(object) 需要单个对象 ,而不是集合。

谢谢,宽恕,答案。 工作得很好。

为了它的价值,我更喜欢将我的EntityState.Modified赋值保存在一行(因为我有多个),所以使用了以下LINQ:

 properties.ForEach(p => db.Entry(p).State = EntityState.Modified); 

尽管使用代码优先EF,我最终还是来到了这里。 对我来说问题的答案就是不要尝试将实体列表传递给insert方法,而是一次插入一个实体:

entityList.ForEach(context.Insert);