Если вы просто хотите, чтобы это определялось в соответствии с первым соглашением о коде, тогда да, вам нужны оба с обеих сторон. Я бы также сделал коллекцию «виртуальной» для поддержки отложенной загрузки.
Вы можете настроить его, используя свободную конфигурацию при сборке модели. Было бы что-то вроде этого
modelBuilder.Entity<Product>()
.HasMany(x => x.Category)