Skip to content

Feature: HW3: setup EF Core, repositories, controllers and seeding#2

Open
goodman74 wants to merge 1 commit intomainfrom
feature/homework-3
Open

Feature: HW3: setup EF Core, repositories, controllers and seeding#2
goodman74 wants to merge 1 commit intomainfrom
feature/homework-3

Conversation

@goodman74
Copy link
Copy Markdown
Owner

Состав выполненных работ

  • Общие изменения:

    • Настроен локальный EF Core (dotnet ef)
    • Подключён и сконфигурирован SQLite
    • Добавлены конфигурации таблиц (Fluent API)
    • Созданы и применены миграции
  • Repository слой:

    • Добавлен обобщённый EfRepository
    • Реализованы методы Add, GetAll и остальные базовые операции
    • Проведён рефакторинг IRepository и EfRepository
  • Unit of Work:

    • Добавлены IUnitOfWork и EfUnitOfWork
  • Seeding:

    • Включено заполнение таблиц начальными данными
    • Проведён рефакторинг механизма seeding
  • Controllers:

    • Реализованы CRUD actions для:
      • CustomersController
      • PreferencesController
      • PromoCodesController

- Общие изменения:
  - Настроен локальный EF Core (dotnet ef)
  - Подключён и сконфигурирован SQLite
  - Добавлены конфигурации таблиц (Fluent API)
  - Созданы и применены миграции (migration + update)

- Repository слой:
  - Добавлен обобщённый EfRepository<T>
  - Реализованы методы Add, GetAll и остальные базовые операции
  - Проведён рефакторинг IRepository и EfRepository

- Unit of Work:
  - Добавлены IUnitOfWork и EfUnitOfWork

- Seeding:
  - Включено заполнение таблиц начальными данными
  - Проведён рефакторинг механизма seeding

- Controllers:
  - Реализованы CRUD actions для:
    - CustomersController
    - PreferencesController
    - PromoCodesController
@goodman74
Copy link
Copy Markdown
Owner Author

Комментарии к выполненному ДЗ

1. Подключение Entity Framework и SQLite

Сделано с уточнениями:

  • Конфигурация выполнена через Fluent API с явным заданием всех ключевых настроек, без опоры на конвенции EF.
    Это обеспечивает предсказуемость модели и позволяет централизованно видеть конфигурацию таблиц.

  • С точки зрения проектирования текущие модели сущностей желательно было бы изменить:
    добавить поля внешних ключей PartnerManagerId, RoleId и PreferenceId в соответствующие сущности.
    Однако в рамках данной задачи модель оставлена максимально близкой к исходной постановке, без изменения структуры моделей.
    Связи настроены через Fluent API, а работа с данными выполняется в соответствии с выбранной моделью.
    Хотя Entity Framework всё равно создаёт соответствующие поля внешних ключей в таблицах базы данных, без явных свойств в моделях эти поля недоступны разработчику напрямую.
    Это ухудшает читаемость модели и несколько усложняет работу с запросами, но в рамках данной задачи не является принципиальной проблемой.

2. Изменения в IRepository

– Переименование Update → UpdateDetached
Метод явно предназначен для обновления detached-сущностей.

– Изменение поведения Add и Update
Методы больше не вызывают SaveChanges автоматически и только добавляют изменения в DbContext.

– Добавлен IUnitOfWork.SaveChanges()
Сохранение изменений выполняется явно через UnitOfWork в рамках одного DbContext.

3. Пояснения к Реализация Task<ActionResult> Update() in CustomersController

Для изменения связей между таблицами через навигации в EF Core рекомендуется использовать методы Add/Remove у коллекций, а не просто изменение ссылки на коллекцию
/*
“Manipulate relationships using navigations (for example, by adding to or removing from a collection navigation)
rather than setting foreign key values.”
https://learn.microsoft.com/en-us/ef/core/change-tracking/relationship-changes
*/

4. Оптимизация системы сидирования

Seed система теперь выполняет идемпотентное добавление данных (по ключу Id)

5. Миграции

  • основная миграция InitialCreate
  • дополнительно миграция AddIdxToCustomerPromoCode (fix)

@goodman74 goodman74 force-pushed the main branch 14 times, most recently from 7a02f9c to 5b76014 Compare April 24, 2026 12:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant