第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關系無法更改,因為一個或多個外鍵屬性是不可空的。

關系無法更改,因為一個或多個外鍵屬性是不可空的。

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

3 回答

?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

你之所以面臨這種情況是因為構圖聚集.

在組合中,創(chuàng)建父對象時創(chuàng)建子對象,在其父對象銷毀時銷毀子對象。..所以它的壽命是由它的父母控制的。博客文章及其評論。如果刪除某一帖子,則應刪除其評論。對一個不存在的帖子有評論是沒有意義的。訂單和訂單項目相同。

在聚合中,子對象可以存在,而不考慮其父對象。..如果父對象被銷毀,子對象仍然可以存在,因為以后可能會添加到其他父對象中。播放列表中的歌曲與播放列表中的歌曲之間的關系。如果播放列表被刪除,則不應刪除歌曲。它們可以添加到不同的播放列表中。

實體框架區(qū)分聚合和組合關系的方式如下:

  • 對于組合:它期望子對象具有一個復合主鍵(ParentID,child ID)。這是故意的,因為孩子的ID應該在他們的父母的范圍之內。

  • 對于聚合:它期望子對象中的外鍵屬性是可空的。

因此,出現(xiàn)此問題的原因是您如何在子表中設置主鍵。它應該是合成的,但它不是。因此,實體框架將這種關聯(lián)視為聚合,這意味著,當您刪除或清除子對象時,它不會刪除子記錄。它只需刪除關聯(lián)并將相應的外鍵列設置為NULL(因此這些子記錄以后可以與不同的父記錄關聯(lián))。由于您的列不允許NULL,所以會得到您提到的異常。

解決辦法:

1-如果您有強烈的理由不想使用復合鍵,則需要顯式地刪除子對象。這可以比前面提出的解決方案更簡單:

context.Children.RemoveRange(parent.Children);

2-否則,通過在子表上設置正確的主鍵,您的代碼將看起來更有意義:

parent.Children.Clear();


查看完整回答
反對 回復 2019-06-24
  • 3 回答
  • 0 關注
  • 1311 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號