Сущностям не нужно расширять базовый класс. Единственный раз, когда я использую их, это в системах, где у меня есть действительно общие поля для некоторых / большинства объектов, таких как «EditableEntity», где я мог бы поместить общие поля, такие как CreatedBy, CreatedAt, ModifiedBy, ModifiedAt, RowVersion. Я не использую базовый класс для «Id», например, потому что часто бывают случаи использования другого идентификатора или принятия составного идентификатора для определенных таблиц.
В большинстве примеров используется Code-First просто потому, что он использует код для настройки схемы, и именно этого они ожидают от разработчиков, а не от SQL. ИМО отлично подходит для быстрого запуска, но в долгосрочной перспективе я считаю, что это больше проблем, чем стоит. (Возиться с настройкой миграции вручную, как только вы дойдете до точки, где целостность данных БД важна.) Лично я никогда не использую ее, потому что я пришел из опыта работы с SQL и ORM до начала кода, поэтому мне удобнее думать о Схема рядом с кодом и использование явного отображения, чтобы я точно знал, как EF будет интерпретировать эту схему. Хорошо понимать, как работает код и миграция, но если вам удобно создавать схемы, тогда DB-first - это хорошо. Лучшие практики вступают в игру о том, как научиться отображать отношения и эффективно запрашивать данные. То есть использование .Select()
, вероятно, является наименее понятным аспектом полного использования Entity Framework.