Как и предполагалось в вашем SQLException, это ограничение SQL Server в целом и не имеет ничего общего с EF или Code First. По сути, SQL Server не позволяет создавать каскадные действия для внутренних связей - когда каскадный путь идет от столбца col1 в таблице A к столбцу col2 также в таблице A. A-> A.
Фактически, Code First пытался использовать Декларативную ссылочную целостность (DRI) для принудительного удаления каскадов и бросков SQL Server.
Единственный способ принудительно использовать каскадные удаления для этого отношения - использовать триггеры. Вы можете написать триггер удаления в таблице категорий, который либо удаляет зависимые строки, либо устанавливает для всех соответствующих внешних ключей значение NULL (в зависимости от ваших требований).