在修改实体操作期间从实体框架模型删除问题

时间:2018-12-11 01:35:09

标签: c# .net entity-framework rest orm

我将Entity Framework 6作为REST API实现的一部分,而我的端点之一是带有签名的Modify函数

int ModifyEntity(EntityType sourceEntity)

EntityType具有2个导航属性,并且是整个导航属性组织层次结构的顶部。

在我的Modify函数中,我无法实现特定的情况,其中sourceEntity的子项集合小于数据库中当前的子项集合,因此必须从数据库实体中删除子项。我执行此操作的算法类似于

List<childEntity> toDelete = new List<childEntity>();

// Iterate through and delete any entity in the one that's not in the other
foreach (var childEntity in entityToModify.CollectionOfChildren) 
{
     var existingChildren = sourceEntity.CollectionOfChildren.FirstOrDefault(source => source.childId == childEntity.childId);

     if (existingCategoryInDatabase == null) 
     {
         toDelete.Add(child);
     }
}

foreach (var entity in toDelete) 
{
    entityToModify.setOfchildEntitys.Remove(entity);
}

基本上,我发现db对象中存在的,不存在于源文件中的所有子级,收集它们,然后进行遍历并删除它们。但是,这样做之后,每次调用.SaveChanges()时,我总是会遇到异常:

  

操作失败:由于一个或多个外键属性不可为空,因此无法更改关系。对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

我对此感到非常困惑,因为我的基础数据库实现对所有相关外键都具有删除级联约束,而我的删除端点仅接受顶级实体ID并调用.Remove()也是可以的,因此错误对我来说真的没有意义。我不确定如何继续。

0 个答案:

没有答案