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;
}
我已根據您的建議更改了代碼,現在得到以下異常:由於一個或多個外鍵屬性不可空,因此無法更改關係。當對關係進行更改時,相關的外鍵屬性將設置爲空值。如果外鍵不支持空值,則必須定義新的關係,必須爲外鍵屬性指定另一個非空值,或者必須刪除不相關的對象。 – RubbleFord
只好添加db.Entry(record).State = EntityState.Deleted;進入foreach。 – RubbleFord
如果你真的保存'person'而不是'model',那麼你不應該這樣做。 –