Почему EF4 обнуляет отношения до удаления фиксации удаления записи? - PullRequest
2 голосов
/ 11 августа 2011

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

        TestRequest req = _context.TestRequests
                                  .Where(x => x.id == id)
                                  .Include(x => x.TestRequestRuns)
                                  .Include(x => x.TestPlanFile)
                                  .Single();

        _context.TestRequests.Remove(req);
        _context.UploadedFiles.Remove(req.TestPlanFile);
        _context.SaveChanges();

Этот код исключений при удалении загруженного файла.Отладка показывает, что вызов _context.TestRequests.Remove(req) делает свойство req.TestPlanFile null, вызывая, таким образом, исключение (вы не можете удалить пустой загруженный файл).Это НЕ очищает свойство req.TestPlanFileId.

Чтобы выполнить это удаление, необходимо пометить дочерние объекты для удаления, прежде чем пометить основной объект для удаления.Это также означает, что пометка элемента для удаления ДОЛЖНА будет последним, что вы сделаете с данными этих сущностей, потому что вы не сможете (по крайней мере легко) получить доступ к дочерним сущностям для дальнейшей манипуляции (не всегдаБудете ли вы удалять дочерние объекты, например, если загруженный файл используется несколькими планами тестирования).

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

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