Невозможно изменить отношение, так как одно или несколько свойств внешнего ключа не могут быть равны нулю

(ПРИМЕЧАНИЕ: этоне дубликатэтот вопрос хотя оно имеет то же исключение.)

у меня естьбедный человек'транзакция в месте, где стратегия:

Вставьте родительскую и дочернюю запись.Выполните длительную операцию.Если длительная операция завершится неудачно, удалите ранее вставленные родительские и дочерние записи.

Когда я пытаюсь выполнить шаг 3, я получаю следующее сообщение:

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

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

Мы используемсамообследуемые объекты и мой код эффективно это:

var parent = new Parent(1,2,3);
var child = new Child(4,5,6);
parent.Children.Add(child);

MyContext.Parents.ApplyChanges(parent);
MyContext.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);

// At this point, inserts were successful and entities are in an Unchanged state.
// Also at this point, I see that parent.Children.Count == 1

var shouldDeleteEntities = false;
try
{
  // This is not database-related. This process does some
  // encryption/decryption and uploads some files up to
  // Azure blob storage. It doesn't touch the DB.
  SomeLongRunningProcess();
}
catch
{
  // Oops, something bad happened. Let's delete the entities!
  shouldDeleteEntities = true;
}

// At this point, both entities are in an Unchanged state, child still
// appears in parent.Children, nothing is wrong that I can see.
parent.MarkAsDeleted();
child.MarkAsDeleted();

// I've tried MyContext.ApplyChanges here for both entities, no change.

// At this point, everything appears to be in the state that
// they're supposed to be!
try
{
  MyContext.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
}
catch
{
  // This exception was thrown and I can't figure out why!
}

Какие'не так с этой логикой? Почему я не могу просто удалить эти две записи? Я'мы пробовали звонитьMyContext.ApplyChanges после того, как я позвонюMarkAsDeleted, Я'Я перепробовал все виды вещей, и неважно, что, как бы я ни старался объяснить контекст, который я хочуи то и другое из них удалены, он продолжает выбрасывать это исключение.

Ответы на вопрос(1)

Ваш ответ на вопрос