0
我有一个ChangeRequest对象和一个具有多对多关系的BusinessArea对象。有一个连接表:ChangeRequestBusinessArea。错误地更新多对多连接表
如果我使用BusinessAreaIDs 2,7,8和10创建并保存新的ChangeRequest,那么连接表更新就好了。
例如
ChangeRequestID BusinessAreaID
1 2
1 7
1 8
1 10
但是当我然后编辑并保存BusinessAreaIDs 1,2,3,7和10相同ChangeRequest,我得到如下:
ChangeRequestID BusinessAreaID
1 2
1 7
1 8
1 10
1 11
1 12
1 13
1 14
1 15
下面是代码:
类
namespace MOC.Models
{
public class ChangeRequest
{
public ChangeRequest()
{
BusinessAreas = new List<BusinessArea>();
}
public int ChangeRequestID { get; set; }
public string ChangeRequestName { get; set; }
public virtual ICollection<BusinessArea> BusinessAreas { get; set; }
}
}
namespace MOC.Models
{
public class BusinessArea
{
public int BusinessAreaID { get; set; }
public string BusinessAreaName { get; set; }
public virtual ICollection<ChangeRequest> ChangeRequests { get; set; }
}
}
操作方法
[HttpPost]
public ActionResult Edit(int id, ChangeRequestViewModel ChangeRequestViewModel)
{
if (ModelState.IsValid)
{
var changeRequest = new ChangeRequest
{
ChangeRequestID = id
};
AddOrUpdateBusinessAreas(changeRequest, ChangeRequestViewModel.BusinessAreas);
db.Entry(changeRequest).State = EntityState.Modified;
db.SaveChangeRequests();
return RedirectToAction("Index");
}
return View(ChangeRequestViewModel);
}
private void AddOrUpdateBusinessAreas(ChangeRequest ChangeRequest, IEnumerable<AssignedBusinessAreaData> assignedBusinessAreas)
{
foreach (var assignedBusinessArea in assignedBusinessAreas)
{
if (assignedBusArea.Assigned) {
var busarea = new BusArea { BusAreaID = assignedBusArea.BusAreaID };
Change.BusAreas.Add(busarea);
} else {
var busarea = new BusArea { BusAreaID = assignedBusArea.BusAreaID };
Change.BusAreas.Remove(busarea);
}
}
}
完美。 :) 非常感谢。 – user1405195 2013-04-07 18:55:41