C # Почему я получаю исключение «отношения не могут быть изменены»? (EF) - PullRequest
1 голос
/ 15 октября 2011

У меня есть этот метод:

    public void AddFile(MediaFileName mediaFile)
    {
        // Get a list of items which must be removed
        var tmp = MediaFileNames.ToList().Where(m => m.FileName.Contains(mediaFile.FileType.ToString())).ToList(); // FileType is an enum

        // remove each item from the Navigation property from memory
        tmp.ForEach(f => MediaFileNames.Remove(f));

        // Store items with an id in a list. This list is accessed by the presenter to delete these records
        tmp.Where(f => f.Id != 0).ToList().ForEach(f => _filesToRemove.Add(f));

        // Set the items filename
        mediaFile.FileName = mediaFile.FileType.ToString() + new FileInfo(mediaFile.SourceFile).Extension;

        // Add the item to the navigation property 
        MediaFileNames.Add(mediaFile);
    }

MediaFilesNames - это свойство навигации класса Media.

Я храню список (_filesToRemove) элементов, которые необходимо удалить из базы данных.,Этот список доступен из моего репозитория:

    public bool Update(Act act)
    {
        foreach (var file in act.Media.FilesToRemove)
        {
            if (_context.MediaFileNames.FirstOrDefault(f => file.Id == f.Id) != null)
                _context.MediaFileNames.DeleteObject(file);
        }

        _context.SaveChanges();

        return true;
    }

Когда вызывается SaveChanges, я получаю это сообщение:

The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.

Я не понимаю, почему я получаю этосообщение, потому что я удаляю существующие элементы и добавляю только один новый элемент.Я надеюсь, что вы можете мне помочь.

1 Ответ

1 голос
/ 15 октября 2011

Попробуйте проверить отношения в вашей базе данных и указать, что их правила удаления должны выполняться в каскадном режиме.

Или попробуйте проверить ваши внешние ключи в соответствующих таблицах и установите для их значения ALLOW NULL значение true. Что вы можете сделать, это использовать индексы для инкриминированных столбцов и добавить уникальные ограничения для них, чтобы вы могли использовать их в качестве внешнего ключа в ваших отношениях.

Если столбец является частью первичного ключа, вы не сможете установить для параметра ALLOW NULL значение true.

...