Наличие одного большого контекста не будет загружать сущности в память при построении, но разрешит сопоставления сущностей, которые могут занять несколько секунд в очень больших контекстах для первой загрузки.Ограниченные контексты подходят для очень больших систем, в которых вы можете отделить связанные сущности или отделить «тяжелые» или чувствительные ко времени сущности от основного контекста использования.
Я использую шаблон с ограниченными контекстами, в котором используется атрибут, типизированный дляРассматриваемый контекст, чтобы отметить, какие конфигурации типов сущностей применимы к какому контексту.Это позволяет использовать более мелкие, подходящие только для чтения определения сущностей.Я бы действительно рекомендовал это только для очень больших наборов сущностей.Использование отложенного выполнения и выражений .Select () для извлечения только тех данных, которые необходимы, когда это необходимо, использование нескольких объединенных объявлений сущностей обычно не требуется.
Аргумент для использования шаблонов Unit of Work & Repository в первую очередьвокруг включения модульного тестирования.Я не рекомендую использовать универсальные репозитории (репозиторий для каждой сущности), а использовать шаблон репозитория так же, как вы используете шаблон контроллера.Каждый репозиторий обслуживает область приложения с методами для извлечения, создания и удаления объектов, относящихся к этой области.Привязка репозитория к одному объекту приводит к большому количеству стандартного кода или общих операций, которые не относятся ко всем объектам одинаково.Это делает ваш код менее гибким и в конечном итоге труднее для чтения.В большинстве случаев вы должны использовать отношения, отображаемые между объектами, поэтому один репозиторий может управлять извлечением и воздействием, например, на все соответствующие объекты для определенного экрана, а не переключаться между множеством различных репозиториев, чтобы попытаться загрузить соответствующие данные.Я использую шаблон DbContextScope UoW от Mehdime, поскольку он облегчает как чтение / запись, так и области только для чтения в репозиториях / помощниках и устраняет необходимость вставлять оболочку dbcontext / UoW в репозитории.Это позволяет иметь несколько областей действия UoW в запросе по сравнению с областью видимости экземпляра DbContext / UoW для запроса или вручную возиться с областями действия на весь срок действия, если ваш контейнер поддерживает это.В любом случае стоит посмотреть как вариант.Реализация Mehdime для EF 6.x, в то время как для EF Core доступны вилки.