Ответ 1
Сначала база данных не полностью исключает архитектуру лука (например, порты и адаптеры или гексагональную архитектуру, поэтому, если вы видите ссылки на те, что они одинаковые), но это, безусловно, сложнее. Архитектура лука и разделение проблем, которые он отлично вписывает в дизайн с доменным дизайном (я думаю, вы уже упомянули в twitter, что вы уже видели некоторые из моих видео на эту тему на Pluralsight).
Вам следует избегать размещения EDMX в проектах Core или Web. Для этого необходима инфраструктура. В этот момент, сначала с базой данных, у вас будут объекты EF в инфраструктуре. Однако вы хотите, чтобы ваши бизнес-объекты/объекты домена жили в Core. В этом случае у вас есть два варианта, если вы хотите продолжить этот путь:
1) Сначала переключитесь с базы данных на первый код (возможно, с помощью инструмента), чтобы вы могли иметь объекты POCO в Core.
2) Создавайте карту взад и вперед между объектами инфраструктуры и вашими объектами Core, возможно, используя что-то вроде AutoMapper. До того, как EF поддерживал объекты POCO, это был подход, который я использовал при его использовании, и я бы написал репозитории, которые обрабатывали только объекты Core, но внутренне отображались для объектов, специфичных для EF.
Что касается ваших вопросов о репозиториях и единицах работы, об этом уже много написано, о SO и в других местах. Разумеется, вы можете использовать общую репозиториальную реализацию, чтобы упростить доступ к CRUD большому набору сущностей, и похоже, что это может быть быстрым способом продвижения вперед в вашем сценарии. Тем не менее, моя общая рекомендация заключается в том, чтобы избежать создания общих хранилищ в качестве ваших доступных средств доступа к вашим бизнес-объектам и вместо этого использовать агрегаты (см. DDD или мой курс DDD с Джули Лерман на Pluralsight) с одним конкретным хранилищем для каждого сводного корня. Вы также можете отделить сложные бизнес-объекты от операций CRUD и следовать только по методу "Агрегат", где это оправдано. Преимущество, которое вы получаете от этого подхода, состоит в том, что вы ограничиваете доступ к объектам и получаете аналогичные преимущества для фасада над вашим (большим) набором объектов базы данных.
Не чувствуйте, что у вас может быть только один dbcontext для каждого приложения. Похоже, вы меняете этот дизайн с течением времени, а не начинаете с применения зеленого поля. С этой целью вы можете сохранить ваш .edmx файл и, возможно, общий репозиторий для целей CRUD, но затем создать новый код первого dbcontext для определенного набора операций, которые гарантируют сущности POCO, разделение проблем, повышение тестовой способности и т.д. Со временем, вы можете перенести основную часть основного кода, чтобы использовать это, сохраняя при этом существующий dbcontext, чтобы не потерять и использовать текущие функции.