![](/img/trans.png)
[英]Entity Framework 5 The relationship could not be changed because one or more of the foreign-key properties is non-nullable
[英]Delete entity with non-nullable foreign key relationship entity framework 5 POCO
我與子實體上的不可為空的外鍵列具有一對多關系。 我正在嘗試從子表中刪除一條記錄,但似乎無法使其正常工作。
我最終得到一條類似於以下內容的消息-發生了引用完整性約束沖突:除非將依賴對象設置為關聯對象,否則不能更改作為引用完整性約束一部分的主鍵屬性,除非將其設置為關聯的主要對象。 必須跟蹤主體對象,並且不將其標記為刪除
我試圖通過調用context.Set()。Remove(entity)刪除對象。
我嘗試從父集合中刪除實體,然后在調用保存更改之前將其刪除。 我也嘗試過直接刪除子實體,但是無論我做什么,我似乎都無法正常工作。
在實體框架5中刪除具有不可空外鍵關系的子實體的正確方法是什么?
這是我的映射配置:
這有效-
var item = this.unitOfWork.PersonalListItemRepository.GetFirst(x => x.PersonalListID == 45146 && x.ItemCode == "1030943" && x.UOM == "EA");
this.unitOfWork.PersonalListItemRepository.Delete(item);
刪除實現很簡單-
this.context.Set<T>().Remove(item);
但是,這行不通-
var listToUpdate =
this.unitOfWork.PersonalListRepository.FindByExpression(
x => x.PersonalListID == personalList.PersonalListID).First();
var entityToDelete = listToUpdate.PersonalListItems.First();
this.unitOfWork.PersonalListItemRepository.Delete(entityToDelete);
FindByExpression的實現-
public ICollection<T> FindByExpression(Expression<Func<T, bool>> expression)
{
return context.Set<T>().Where(expression).ToList();
}
我還嘗試過從父實體集合中刪除該項目,而只是更新父項。 我想,一旦我得到了需要刪除的子級的列表,就可以從上下文中重新加載它們,然后將它們刪除(但是從我的上下文中開始加載項目似乎是不必要的)。 我一定在這里缺少重要的東西...
好的,所以這里的問題最終是我最終嘗試刪除(或修改/附加到上下文)的項目不是從原始查詢拉到數據庫的代理。 因此,實體框架之所以抱怨,是因為盡管我試圖修改它已經使用新的實體值進行跟蹤的實體的主鍵(該例外,盡管正確,但卻具有誤導性)。
此處的解決方案是確保在上下文已開始跟蹤同一實體的代理版本時,我不嘗試附加非代理實體或使用非代理實體進行更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.