Коли я зберігаю сутність за допомогою сутності фреймворка, я, природно, припускав, що вона намагатиметься лише зберегти вказану сутність. Однак він також намагається врятувати дочірні сутності цієї сутності. Це спричиняє всілякі проблеми з цілісністю. Як змусити EF зберігати лише сутність, яку я хочу зберегти, а отже ігнорувати всі дочірні об’єкти?
Якщо я вручну встановлюю для властивостей значення null, я отримую повідомлення про помилку "Операція не вдалася: зв’язок змінити не вдалося, оскільки одне або кілька властивостей зовнішнього ключа не мають нульового значення". Це надзвичайно контрпродуктивно, оскільки я спеціально встановив для дочірнього об'єкта значення null, щоб EF залишив його в спокої.
Чому я не хочу зберігати / вставляти дочірні об’єкти?
Оскільки це обговорюється туди-сюди в коментарях, я дам кілька обґрунтувань, чому я хочу, щоб мої дочірні предмети залишились самі.
У додатку, який я будую, об’єктна модель EF не завантажується з бази даних, а використовується як об’єкти даних, які я заповнюю під час аналізу плоского файлу. У випадку дочірніх об'єктів багато з них посилаються на таблиці пошуку, що визначають різні властивості батьківської таблиці. Наприклад, географічне розташування первинної сутності.
Оскільки я заповнив ці об'єкти сам, EF припускає, що це нові об'єкти, і їх потрібно вставити разом з батьківським об'єктом. Однак ці визначення вже існують, і я не хочу створювати дублікати в базі даних. Я використовую об'єкт EF лише для пошуку та заповнення зовнішнього ключа в моїй сутності основної таблиці.
Навіть з дочірніми об’єктами, які є справжніми даними, мені потрібно спочатку зберегти батьківського елемента та отримати первинний ключ або EF, здається, все робить безлад. Сподіваюся, це дає якесь пояснення.