我已经完成了我一直在骚扰大家的小时编辑器。我现在只需要让它删除一些东西:要么是批发小时计划删除,要么是删除ExceptionHoursSet(一般小时模式的例外)。每个ExceptionHoursSet都有一个WeekSpec,而WeekSpec又有一个DaySpec集合(包含一天中的小时)。因此,我显然想遍历每个异常集,并删除已标记为删除的日期、周和集。以下是缩写方法:
[HttpPost]
public ActionResult Edit(Schedule schedule, [Bind(Prefix = "ExceptionHoursSet")] List<ExceptionHoursSet> exceptionHoursSets)
{
using (var db = new HoursDb())
{
ViewBag.DayNames = HomeServices.DayNames;
if (ModelState.IsValid)
{
schedule.ExceptionHoursSets = exceptionHoursSets;
foreach (var exceptionHoursSet in exceptionHoursSets)
{
if (!exceptionHoursSet.IsDeleting)
{
exceptionHoursSet.WeekSpecId = exceptionHoursSet.WeekSpec.WeekSpecId;
// for coherency (should this be necessary?)
foreach (var daySpec in exceptionHoursSet.WeekSpec.DaySpecs)
{
db.Entry(daySpec).State = EntityState.Modified;
db.SaveChanges();
}
db.Entry(exceptionHoursSet.WeekSpec).State = EntityState.Modified;
db.SaveChanges();
db.Entry(exceptionHoursSet).State = EntityState.Modified;
db.SaveChanges();
}
else
{
var daySpecs = new List<DaySpec>(exceptionHoursSet.WeekSpec.DaySpecs);
db.ExceptionHoursSets.Attach(exceptionHoursSet);
db.WeekSpecs.Attach(exceptionHoursSet.WeekSpec);
foreach (var daySpec in daySpecs)
{
db.DaySpecs.Attach(daySpec);
db.DaySpecs.Remove(daySpec);
}
db.WeekSpecs.Remove(exceptionHoursSet.WeekSpec);
db.ExceptionHoursSets.Remove(exceptionHoursSet);
db.SaveChanges();
}
}
if (HasEditedException(lastExceptionHoursSet))
{
var dayNum = 0;
foreach (var daySpec in lastExceptionHoursSet.WeekSpec.DaySpecs)
{
daySpec.DayNum = dayNum++;
daySpec.DaySpecId = Guid.NewGuid();
db.DaySpecs.Add(daySpec);
}
lastExceptionHoursSet.WeekSpec.WeekSpecId = Guid.NewGuid();
db.WeekSpecs.Add(lastExceptionHoursSet.WeekSpec);
lastExceptionHoursSet.ExceptionHoursSetId = Guid.NewGuid();
exceptionHoursSets.Add(lastExceptionHoursSet);
db.ExceptionHoursSets.Add(lastExceptionHoursSet);
}
db.Entry(schedule).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(schedule);
}
}
当我试图附加到我试图删除的exceptionHoursSet时,我得到的错误是:
发生引用完整性约束冲突:定义引用约束的属性值在关系中的主体对象和依赖对象之间不一致。
这是什么?更重要的是,我该如何摆脱它?
谢谢你容忍我,Nathan Bond
没错,找到了。首先我需要附加异常集所属的Schedule。然后,我在附件中也出现了同样的错误,但这是因为我没有做一些事情来将事情集成到Schedule的道具中,这些工作是在我从上面的列表中缩写出来的代码中完成的。从本质上讲,我还有一个用于Schedule的WeekSpec属性以及异常集,它保存了一般的小时模式。当我从视图中获得Schedule参数时,Schedule有它的ID和它的常规小时WeekSpec,WeekSpec也有它自己的ID。然而,Schedule的WeekSpec的外键没有设置;只有在我将其设置为WeekSpec的ID之后,我才能有效地附加。所以,我所要做的就是在ID匹配后将日程附件代码移动到,一切都很顺利。抱歉问了一个愚蠢的问题。