Если в базе данных сконфигурирован каскад, достаточно удалить принцип.
Вы можете сделать это без запроса к базе данных, чтобы получить объект, который будет удален, используя объекты-заглушки, как это:
var stub = new Principal{ID = idToDelete};
ctx.AttachTo("PrincipalsEntitySetName", stub);
ctx.DeleteObject(stub);
Конечно, это не вся история, если есть ссылки или поля, используемые для проверок параллелизма, они вам тоже понадобятся.
Если, с другой стороны, у вас есть только каскадное удаление в модели (т.е. в базе данных нет каскада), вам нужно сначала получить ВСЕ зависимости в памяти, а затем вызвать delete:
var stub = new Principal{ID = idToDelete};
ctx.AttachTo("PrincipalsEntitySetName", stub);
stub.Dependendents.Load();
ctx.DeleteObject(stub);
Это работает только потому, что EF выдает (что ожидается) избыточные удаления, чтобы синхронизировать ObjectContext с тем, что ожидается в базе данных.
Надеюсь, это поможет
Alex
PS У меня есть несколько советов на эту тему в моем блоге MSDN. Извлеките tip 33 (каскадное удаление) и tip 26 (заглушки)