Могут ли частные сеттеры использоваться в модели сущности?

Я только начинаю с Entity Framework, и меня беспокоит легкость, с которой первичный ключ может быть переопределен. Я знаю, что могу защитить эту модель в своем контроллере (я использую WebAPI с ASP.NET MVC 5), но мне интересно, можно ли запретить кому-либо устанавливать идентификатор моей модели из самой модели через аннотации или что-то еще?

В принципе я могу это сделать:

public int ID { get; private set; }

или что-то подобное, в модели EF6?

Если это легко найти через Google, то я не знаю терминов для поиска. Я не смог найти ничего, что действительно ответит на это.

Ответ 1

Да, вы можете, и он должен работать нормально. Per это сообщение в блоге Джули Лерман (кто Microsoft Entity Framework MVP, поэтому я настоятельно рекомендую вам читать ее блог в своем путешествии по EF!):

Entity Framework требует конструктора без параметров, чтобы материализуют объекты, возвращаемые из запросов (или загрузки). Я сделал эта уступка в моем классе, но обратите внимание, что это частный конструктор. Поэтому я все еще защищаю свой класс. Никто не может получить к нему доступ. Но EF все еще может заполнить этот класс, когда я выполняю запросы. И нет, я не делаю волшебства, чтобы сказать EF использовать мою публику конструктор. Он действительно использует частный конструктор.