猿问

插入/更新多个到多个实体框架。我该怎么做?

我正在使用EF4和它的新功能。我的项目中有很多对很多,似乎无法解决如何插入或更新。我已经构建了一个小项目,只是为了看它应该如何编码。


假设我有3个表


类:ClassID-ClassName

学生:StudentID-FirstName-Surname

StudentClass:StudentID-ClassID

添加所有关系并通过模型浏览器更新模型后,我注意到StudentClass没有出现,这似乎是默认行为。


现在我需要同时进行插入和更新。你怎么做呢?我可以下载示例的任何代码示例或链接,还是可以节省5分钟?


拉丁的传说
浏览 408回答 3
3回答

哈士奇WWW

试试这个更新:[HttpPost]public ActionResult Edit(Models.MathClass mathClassModel){&nbsp; &nbsp; //get current entry from db (db is context)&nbsp; &nbsp; var item = db.Entry<Models.MathClass>(mathClassModel);&nbsp; &nbsp; //change item state to modified&nbsp; &nbsp; item.State = System.Data.Entity.EntityState.Modified;&nbsp; &nbsp; //load existing items for ManyToMany collection&nbsp; &nbsp; item.Collection(i => i.Students).Load();&nbsp; &nbsp; //clear Student items&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; mathClassModel.Students.Clear();&nbsp; &nbsp; //add Toner items&nbsp; &nbsp; foreach (var studentId in mathClassModel.SelectedStudents)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; var student = db.Student.Find(int.Parse(studentId));&nbsp; &nbsp; &nbsp; &nbsp; mathClassModel.Students.Add(student);&nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if (ModelState.IsValid)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp;db.SaveChanges();&nbsp; &nbsp; &nbsp; &nbsp;return RedirectToAction("Index");&nbsp; &nbsp; }&nbsp; &nbsp; return View(mathClassModel);}

人到中年有点甜

我想在此加上我的经验。实际上,当您将对象添加到上下文时,它会将所有子项和相关实体的状态更改为“已添加”。虽然规则中存在一个小例外:如果孩子/相关实体被相同的上下文跟踪,EF确实理解这些实体存在并且不添加它们。例如,当您从其他某个上下文或web ui等加载子/相关实体然后是,EF不知道有关这些实体的任何内容并且添加所有这些实体时,就会出现问题。为了避免这种情况,只需获取实体的密钥并找到它们(例如context.Students.FirstOrDefault(s => s.Name == "Alice")),在您想要添加的相同上下文中)。
随时随地看视频慕课网APP
我要回答