В методе SaveChangesCore EFContextProvider (EF6) обработка исключений выглядит следующим образом:
} catch (Exception e) {
while (e.InnerException != null) {
e = e.InnerException;
}
throw e;
}
Это вызывает только самое внутреннее исключение и скрывает соответствующую информацию, обнаруженную внешними исключениями.
Когда процесс SaveChanges проходит через несколько уровней, следующее прямое исключение уровня теряется, и выдается только последнее исключение в цепочке. Это не позволяет правильно обрабатывать исключения для вызывающего.