为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
拉丁的传说 2019-08-30 16:37:00
我正在使用EF4和它的新功能。我的项目中有很多对很多,似乎无法解决如何插入或更新。我已经构建了一个小项目,只是为了看它应该如何编码。假设我有3个表类:ClassID-ClassName学生:StudentID-FirstName-SurnameStudentClass:StudentID-ClassID添加所有关系并通过模型浏览器更新模型后,我注意到StudentClass没有出现,这似乎是默认行为。现在我需要同时进行插入和更新。你怎么做呢?我可以下载示例的任何代码示例或链接,还是可以节省5分钟?
查看完整描述

3 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

试试这个更新:


[HttpPost]

public ActionResult Edit(Models.MathClass mathClassModel)

{

    //get current entry from db (db is context)

    var item = db.Entry<Models.MathClass>(mathClassModel);


    //change item state to modified

    item.State = System.Data.Entity.EntityState.Modified;


    //load existing items for ManyToMany collection

    item.Collection(i => i.Students).Load();


    //clear Student items          

    mathClassModel.Students.Clear();


    //add Toner items

    foreach (var studentId in mathClassModel.SelectedStudents)

    {

        var student = db.Student.Find(int.Parse(studentId));

        mathClassModel.Students.Add(student);

    }                


    if (ModelState.IsValid)

    {

       db.SaveChanges();

       return RedirectToAction("Index");

    }


    return View(mathClassModel);

}


查看完整回答
反对 回复 2019-08-30
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

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


查看完整回答
反对 回复 2019-08-30
  • 3 回答
  • 0 关注
  • 407 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信