Один из способов - определить свойство ID следующим образом:
public int ID { get; internal set; }
... затем определите ваш класс DbContext в той же сборке, что и класс "Category". У него будет доступ на запись к свойству, но классы вне сборки не будут.
Если вам нужно определить свой DbContext в отдельной сборке, вы можете использовать атрибут InternalsVisibleTo , чтобы эта сборка видела внутренние элементы вашего класса "Category".