0

我是新來的EF6,它是我的一個側面項目,我很努力地看到如何刪除/修改子行。我通常會把這些東西搞定,但我正在調查提高生產力。使用EF6刪除子對象

我有以下提供JSON到我的淘汰賽模型。

public JsonResult DetailsData(int? id) 
{ 
    var result = from p in db.People 
     where p.Id == id 
     select new 
     { 
      p.Id, 
      p.FirstName, 
      p.SecondName, 
      SicknessRecords = from s in p.SicknessRecords 
           select new 
           { 
            s.Id, 
            s.Description, 
            s.Occurred, 
            s.PersonId 
           } 
     }; 

    return Json(result.First(), JsonRequestBehavior.AllowGet); 
} 

然後在編輯它之後接收它。

[HttpPost] 
public JsonResult DetailsData(Person model) 
{ 
    if (ModelState.IsValid) 
    { //db.SaveChanges(); 
    } 

    return null; 
} 

瀏覽器我已經刪除了兩個子病行裏面,這是被正確地發送回服務器,但我無法弄清楚如何將其刪除。

更新:

[HttpPost] 
public JsonResult DetailsData(Person model) 
{ 
    if (ModelState.IsValid) 
    { 
     var item = (from p in db.People 
      where p.Id == model.Id 
      select p).First(); 

     var removedRecords = item.SicknessRecords.Except(model.SicknessRecords).ToList(); 
     foreach (var record in removedRecords) 
     { 
      item.SicknessRecords.Remove(record); 
     } 

     db.SaveChanges(); 
    } 
    return null; 
} 

回答

0

你必須知道是什麼改變了,這意味着你必須從數據庫中選擇原來的人重新。那麼你可以這樣做:

var removedRecords = person.SicknessRecords.Except(model.SicknessRecords); 
for (var record in removedRecords) 
{ 
    person.SicknessRecords.Remove(record); 
} 

你應該總是修改原始記錄的發佈數據,而不是直接簡單地保存發佈的數據。

+0

我已根據您的建議更改了代碼,現在得到以下異常:由於一個或多個外鍵屬性不可空,因此無法更改關係。當對關係進行更改時,相關的外鍵屬性將設置爲空值。如果外鍵不支持空值,則必須定義新的關係,必須爲外鍵屬性指定另一個非空值,或者必須刪除不相關的對象。 – RubbleFord

+0

只好添加db.Entry(record).State = EntityState.Deleted;進入foreach。 – RubbleFord

+0

如果你真的保存'person'而不是'model',那麼你不應該這樣做。 –