Проблема удаления из модели Entity Framework при операции модификации объекта - PullRequest
0 голосов
/ 11 декабря 2018

Я использую Entity Framework 6 как часть реализации REST API, и одна из моих конечных точек - это функция изменения с подписью

int ModifyEntity(EntityType sourceEntity)

EntityType имеет 2 свойства навигации и являетсявершина всей иерархии организации свойств навигации.

В моей функции изменения у меня возникают проблемы с реализацией конкретного случая, когда 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():

Операция не выполнена: отношение не может быть изменено, поскольку одно или несколько свойств внешнего ключа не являютсяобнуляемый.Когда в отношение вносится изменение, для соответствующего свойства внешнего ключа устанавливается нулевое значение.Если внешний ключ не поддерживает нулевые значения, необходимо определить новое отношение, свойству внешнего ключа должно быть назначено другое ненулевое значение или несвязанный объект должен быть удален.

IЯ действительно сбит с толку этим, потому что моя базовая реализация базы данных имеет каскадные ограничения удаления для всех соответствующих внешних ключей, и моя конечная точка удаления, которая просто принимает идентификатор сущности верхнего уровня и вызывает .Remove(), тоже работает нормально, так что эта ошибка на самом деле не вызываетсмысл для меня.Я не совсем уверен, как поступить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...