Когда я сохраняю объект с сущностью, я, естественно, предполагал, что он попытается сохранить указанный объект. Тем не менее, он также пытается сохранить дочерние сущности этого объекта. Это вызывает все проблемы целостности. Как заставить EF сохранять только объект, который я хочу сохранить, и, следовательно, игнорировать все дочерние объекты?
Если я вручную установил свойства в значение null, я получаю сообщение об ошибке "Операция завершилась неудачно: отношение не может быть изменено, поскольку одно или несколько свойств внешнего ключа не могут быть обнулены". Это очень контрпродуктивно, так как я установил дочерний объект в значение null, поэтому EF оставит его в покое.
Почему я не хочу сохранять/вставлять дочерние объекты?
Поскольку это обсуждается в комментариях и комментариях, я дам некоторое обоснование, почему я хочу, чтобы мои дочерние объекты остались в покое.
В приложении, которое я создаю, объектная модель EF не загружается из базы данных, а используется как объекты данных, которые я заполняю при анализе плоского файла. В случае дочерних объектов многие из них относятся к таблицам поиска, определяющим различные свойства родительской таблицы. Например, географическое местоположение первичного объекта.
Поскольку я сам заполнял эти объекты, EF предполагает, что это новые объекты и их необходимо вставить вместе с родительским объектом. Однако эти определения уже существуют, и я не хочу создавать дубликаты в базе данных. Я использую только объект EF для поиска и заполнения внешнего ключа в моем основном объекте таблицы.
Даже с дочерними объектами, которые являются реальными данными, мне нужно сначала сохранить родительский элемент и получить первичный ключ, или EF просто кажется бесполезным. Надеюсь, это дает некоторое объяснение.