加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读