С точки зрения только стороны MySQL вашей реализации записи в таблице B не имеют «знания» о какой-либо записи в таблице A. В базе данных связь является однонаправленной
Встроенная каскадная функциональность существует для предотвращения ошибок внешнего ключа, указав БД, что делать при удалении записи, внешний ключ не будет указывать никуда. Удаление записи таблицы A не приведет к ошибке внешнего ключа ни в одной записи таблицы B, поэтому любые функции собственного каскада не сработают
Повторение; Вы не можете сохранить схему такой же, и каскадное удаление из a
в b
, потому что у вас нет каскадного удаления из a
в b
Чтобы получить автоматическое удаление описанных вами записей таблицы B, у вас есть несколько вариантов Что касается БД:
Может быть что-то в JPA, что решает вашу дилемму из коробки, но под капотом это будет делать одно из перечисленных выше (не вариант 1, а, вероятно, вариант 4)
Действительно, это не будет эффективно вообще.
Вы могли всегда писать дополнительный метод:
public static TValue GetValueOrDefault<TKey,TValue>
(this IDictionary<TKey, TValue> dictionary, TKey key)
{
TValue ret;
// Ignore return value
dictionary.TryGetValue(key, out ret);
return ret;
}
Или с C# 7.1:
public static TValue GetValueOrDefault<TKey,TValue>
(this IDictionary<TKey, TValue> dictionary, TKey key) =>
dictionary.TryGetValue(key, out var ret) ? ret : default;
, Который использует:
Нет, потому что иначе, как Вы знали бы различие, когда ключ существует, но сохранил нулевое значение? Это могло быть значительно.