asp.net-mvc-3 – ASP.NET MVC 3一对多无法更新桥表
发布时间:2020-12-16 09:38:26 所属栏目:asp.Net 来源:网络整理
导读:我环顾了几个小时,但我似乎无法找到解决问题的直接方法. 基本上,我有一对多的关系,与桌子桥接.我的控制器似乎完美地处理’create’方法,在’1’表和桥接’many’表中创建记录. 但是,’edit’方法似乎根本不修改/更新桥接表.关于我做错了什么的想法,以及为什
我环顾了几个小时,但我似乎无法找到解决问题的直接方法.
基本上,我有一对多的关系,与桌子桥接.我的控制器似乎完美地处理’create’方法,在’1’表和桥接’many’表中创建记录. 但是,’edit’方法似乎根本不修改/更新桥接表.关于我做错了什么的想法,以及为什么它与’创造’方法不同? 为简洁起见,我想说我有以下型号: public class Incident { [Key] public int IncidentID { get; set; } public string Title { get; set; } public virtual ICollection<IncidentResources> Resources{ get; set; } } 和资源模型: public class Resource { [Key] public int ResourceID{ get; set; } public int Name { get; set; } ...OTHER FIELDS REMOVED FOR BREVITY... } 我通过桥接表和模型桥接这两个: public class IncidentResource { [Key] public int IncidentResourceID { get; set; } public int IncidentID { get; set; } public int ResourceID { get; set; } public virtual <Resource> Resource { get; set; } } 在我的控制器中,我有以下代码: [HttpPost] public ActionResult Create(Incident incident) { //incident.Resources is returned as a valid object... if (ModelState.IsValid) { db.Incidents.Add(incident); db.SaveChanges(); return RedirectToAction("Index"); } return View(incident); } 以上工作完美!正如我所提到的,新事件被插入到正确的表中,并且分配给事件的所有资源都被添加到IncidentResources表中. 但是,以下代码不能以这种方式进行编辑… [HttpPost] public ActionResult Edit(Incident incident) { if (ModelState.IsValid) { //THE USER CAN ADD ADDITIONAL RESOURCES foreach (IncidentResource r in incident.Resources) { r.IncidentID = incident.IncidentID; } db.Entry(incident).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } return View(incident); } 同样,上面似乎对IncidentResources表没有任何作用.不会添加,删除或更新记录.我也没有收到错误.它只是没有做任何事情. 请注意,我不想删除桥表数据并重新插入.我将与那些我不想孤儿的数据建立一对多的关系. 我不明白这是如何运作的? 解决方法
您需要附加在EF外部创建的实体实例,并让EF知道它已被修改.
尝试添加: db.Incidents.Attach(incident); 在改变状态之前.在您的情况下,您的最后一段代码应如下所示: [HttpPost] public ActionResult Edit(Incident incident) { if (ModelState.IsValid) { //THE USER CAN ADD ADDITIONAL RESOURCES foreach (IncidentResource r in incident.Resources) { r.IncidentID = incident.IncidentID; } db.Incidents.Attach(incident); db.Entry(incident).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } return View(incident); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何重用这个基于ASP.NET和C#中的Ultimate RestSharp客户端
- asp.net – WCF与Web-api平台中的数据和事务
- MvcBuildViews真实与实体框架在ASP.NET MVC 2
- Asp.net:代表(“Action”)可以序列化为控制状态吗?
- asp.net-mvc – 如何防止HttpUnauthorizedResult(401)重定向
- asp.net-mvc – 如何使用ASP.net MVC实现动态面包屑?
- asp.net-mvc – 是否有可能在每次验证后使ASP.NET MVC中的A
- asp.net-mvc – 到WebGrid或不到WebGrid …什么是答案?
- asp.net – 在未经授权的请求后禁止NTLM对话框
- 如何使用IIS 6在asp.net中实现远期未来的过期标头