2012-08-06 75 views
0

我已經完成了小時編輯的工作,我一直在竊聽大家。我只需要讓它現在刪除東西:批發小時計劃刪除或刪除ExceptionHoursSets(一般小時模式的例外)。每個ExceptionHoursSet都有一個WeekSpec,它又有一個DaySpecs集合(包含當天的小時)。所以我顯然希望遍歷每個異常集,並刪除已標記爲要刪除的天,周和集。這裏的簡寫方法:附加刪除時的完整性約束違規

[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我試圖刪除時,我得到的錯誤是這樣的:

參照完整性約束衝突發生了:定義引用的屬性值關係中的主體和從屬對象之間的約束不一致。

這是什麼?更重要的是,我該如何擺脫它?

感謝忍受了我,彌敦道 債券

回答

0

對,發現它。首先,我需要附上例外情況集的一部分。然後,我得到了與該附件相同的錯誤,但這是因爲我沒有做一些將事情整合到附表道具中的事情,我在上面列出的代碼中縮減了代碼完成的工作。基本上,我還有Schedule的WeekSpec屬性以及包含一般小時模式的異常集。當我從視圖中獲得Schedule參數時,Schedule有它的ID和它的一般小時數WeekSpec,它也有它自己的ID。然而,附表的WeekSpec的外鍵沒有設置;只有在我將其設置爲WeekSpec的ID後,纔能有效附加。所以,我所要做的就是將計劃附件代碼移到這個ID匹配之後,並且所有東西都是銀色的。對不起,一個愚蠢的問題。

相關問題