我与子实体上的不可为空的外键列存在一对多关系。我正在尝试从子表中删除一条记录,但似乎无法使其正常工作。
我最终得到类似于以下内容的消息 - 发生引用完整性约束冲突:当依赖对象未更改时,作为引用完整性约束一部分的主键属性无法更改,除非将其设置为关联的主体对象。主体对象必须被跟踪并且不被标记为删除
我试图通过调用 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();
}
我还尝试从父实体集合中删除该项目并仅更新父实体。我想我可以,一旦我得到列表,如果我需要删除孩子,从上下文中重新加载它们然后删除它们(但这似乎没有必要从我的上下文开始加载项目)。我一定在这里遗漏了一些重要的东西......