При первом подходе к базе данных Entity Framework Core как мне отделить мою сущность от уровня инфраструктуры?

Я создаю REST API с помощью ASP.NET Core и Entity Framework Core с использованием подхода «сначала база данных» с чистой архитектурой.

Моя база данных уже создана и поддерживается командой администраторов баз данных - вот почему мне нужно использовать Entity Framework Core с подходом «сначала база данных», и нам нужно выполнить обратное проектирование с помощью команды Scaffold-DbContext на уровне инфраструктуры.

В чистой архитектуре сущности должны быть размещены на Core уровне отдельно от уровня инфраструктуры, так как мы будем это делать и как разрешить ваш DbContext как интерфейс.


person Amit Kashyap    schedule 21.02.2020    source источник
comment
Я не уверен, что понимаю ваш вопрос, но если вы спросите, как абстрагировать DbContext, шаблон репозитория, вероятно, поможет.   -  person worldwildwebdev    schedule 21.02.2020


Ответы (1)


Я вижу два варианта:

  1. Вы принимаете зависимость от EF, помещаете сгенерированные сущности в свой основной проект и тем самым принимаете нарушение чистой архитектуры.

  2. Вы создаете свои собственные сущности в основном проекте без зависимости от EF и используете шаблон репозитория для «сопоставления» между своими сущностями и сущностями из EF.

Вариант 1 прост и дешев. Альтернатива 2 дает вам независимость от EF и некоторую абстракцию для вашей команды dba. Выбирайте исходя из того, что важнее для вашего проекта.

person plainionist    schedule 27.02.2020
comment
Я бы выбрал 1 вариант. Лучше ли переместить автоматически сгенерированные объекты db с уровня сохраняемости на уровень домена (сгенерированный командой Scaffold-DbContext)? есть ли какая-либо команда для создания объектов БД в отдельном слое и контекста БД в отдельном слое? - person Amit Kashyap; 02.03.2020
comment
Все зависит от того, для чего вы хотите оптимизировать: нужно ли вам быстрое прототипирование и небольшая ли ваша кодовая база? Вариант 1 может быть лучшим. Вам нужна независимость от других команд, конкретных фреймворков и технологий, а ваша кодовая база велика и ее нужно поддерживать годами: выберите вариант 2. (я не знаю о такой команде) - person plainionist; 03.03.2020