Можно ли использовать созданные EFcore объекты без базового класса? - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь реализовать проект «Чистая архитектура» с нуля, следуя Руководству Microsoft по архитектуре ASP.NET и их образцу проекта eShopOnWeb.

Объекты EF в моем случае сначала являются базой данных.Для этого я использовал инструмент Scaffold-DbContext, но, похоже, он не позволяет указывать базовый класс для сгенерированных объектов.Обычно это не было бы проблемой (я думаю), но проект eShopOnWeb, кажется, имеет суперкласс BaseEntity для всех своих объектов.

Мои вопросы -

  1. Должен ли я беспокоиться о том, чтобы все сущности вообще расширяли базовый класс?Что, если я просто использую сущности как есть (я несколько новичок в этом, так что я могу упустить что-то очень простое)?В случае, если базовый класс - правильный путь, существует ли «официальное» решение для создания сущностей с предопределенным базовым классом?

  2. eShopOnWeb - официальный пример приложения Microsoft - использует кодовый подход к БД.Означает ли это, что это официальная рекомендация Microsoft в отношении передового опыта?Я немного настороженно отношусь к этому, потому что с таким подходом я не уверен, как можно было бы выполнить оптимизацию базы данных и точную настройку (индексы и все другие специфические вещи базы данных) и т. Д.

1 Ответ

1 голос
/ 15 апреля 2019

Сущностям не нужно расширять базовый класс. Единственный раз, когда я использую их, это в системах, где у меня есть действительно общие поля для некоторых / большинства объектов, таких как «EditableEntity», где я мог бы поместить общие поля, такие как CreatedBy, CreatedAt, ModifiedBy, ModifiedAt, RowVersion. Я не использую базовый класс для «Id», например, потому что часто бывают случаи использования другого идентификатора или принятия составного идентификатора для определенных таблиц.

В большинстве примеров используется Code-First просто потому, что он использует код для настройки схемы, и именно этого они ожидают от разработчиков, а не от SQL. ИМО отлично подходит для быстрого запуска, но в долгосрочной перспективе я считаю, что это больше проблем, чем стоит. (Возиться с настройкой миграции вручную, как только вы дойдете до точки, где целостность данных БД важна.) Лично я никогда не использую ее, потому что я пришел из опыта работы с SQL и ORM до начала кода, поэтому мне удобнее думать о Схема рядом с кодом и использование явного отображения, чтобы я точно знал, как EF будет интерпретировать эту схему. Хорошо понимать, как работает код и миграция, но если вам удобно создавать схемы, тогда DB-first - это хорошо. Лучшие практики вступают в игру о том, как научиться отображать отношения и эффективно запрашивать данные. То есть использование .Select(), вероятно, является наименее понятным аспектом полного использования Entity Framework.

...