關系無法更改,因為一個或多個外鍵屬性是不可空的。當我對一個實體進行GetById()并將子實體的集合設置為來自MVC視圖的新列表時,我會得到這個錯誤。操作失?。河捎谝粋€或多個外鍵屬性不可空,關系無法更改。當對關系進行更改時,相關的外鍵屬性將設置為空值。如果外鍵不支持空值,則必須定義新的關系,必須為外鍵屬性分配另一個非空值,或者必須刪除不相關的對象。我不太明白這句話:關系無法更改,因為一個或多個外鍵屬性是不可空的。為什么我要改變兩個實體之間的關系?在整個應用程序的整個生命周期中,它應該保持不變。異常發生的代碼是簡單地將集合中的修改子類分配給現有的父類。這將有望滿足兒童班的取消、新班級的增加和修改的需要。我認為實體框架會處理這個問題。代碼行可歸納為:var thisParent = _repo.GetById(1);thisParent.ChildItems = modifiedParent.ChildItems();_repo.Save();
3 回答

Smart貓小萌
TA貢獻1911條經驗 獲得超7個贊
在組合中,創建父對象時創建子對象,在其父對象銷毀時銷毀子對象。
在聚合中,子對象可以存在,而不考慮其父對象。
對于組合:它期望子對象具有一個復合主鍵(ParentID,child ID)。這是故意的,因為孩子的ID應該在他們的父母的范圍之內。 對于聚合:它期望子對象中的外鍵屬性是可空的。
解決辦法:
context.Children.RemoveRange(parent.Children);
parent.Children.Clear();
添加回答
舉報
0/150
提交
取消