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

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

у меня естьсделка бедняка в месте, где стратегия:

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

Когда я пытаюсь выполнить шаг 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)

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