Реализация паттерна "Unit Of Work" для EntityFrameworkCore на платформе .NET. This is a Unit ofWork pattern implementation on .NET.
- Обновлены пакеты EntityFrameworkCore до
10.0.11(Updated EntityFrameworkCore packages to10.0.11).Microsoft.EntityFrameworkCore.Sqliteв тестах также поднят до10.0.11— уходит транзитивная уязвимостьSQLitePCLRaw(NU1903, GHSA-2m69-gcr7-jv3q).
- Обновлён
Calabonga.PagedListCoreдо3.0.0(UpdatedCalabonga.PagedListCoreto3.0.0). Пакет используется только как контрактIPagedList<T>. - Исправлена несогласованность пагинации (Fixed inconsistent pagination).
GetPagedList(синхронный) иGetPagedListAsyncтеперь используют единую нумерацию страниц: 0-based, первая страница —pageIndex: 0(значение по умолчанию сохранено, ломающих изменений нет).- Для средних страниц корректно вычисляются
HasPreviousPageиHasNextPage(ранее средняя страница сообщала об отсутствии предыдущей). - Синхронный путь больше не материализует весь запрос на клиенте:
Skip/Take/Countтранслируются в SQL. IEnumerable<T>.ToPagedList(...)приведён к тем же 0-based правилам.
- Перехали на NET10 (Migration to NET10)
ServiceLifetimeforIUnitOfWorkadded as a parameter during DI-container registration.
FromSqlRawInterpolatedimplemented inIUnitOfWorkfromDbContext.
- Deprecated methods were removed. Please use
TrackingTypeparameter instead ofdisableTracking.
- Released new
5.0.0version - Deprecated methods will remove soon. Please use new overrides with
TrackingTypeparameter.
- Добавлена поддержка фреймворка NET9.0 наряду с фреймворком NET8.0 (Added support for NET9.0 framework along with NET8.0 framework). Теперь в одном пакете поддержка двух версий.
-
Созданые перегрузки для всех методов, где используется параметр
disableTrackingс целью дополнить новым способом управления слежением за изменениями. Теперь доступно выбрать один из вариантов:/// <summary> /// Changes Tracking Type for DbSet operations /// </summary> public enum TrackingType { NoTracking, NoTrackingWithIdentityResolution, Tracking }
Если вы используте сборку
Calabonga.UnitOfWorkвпервые, то никаких действий дополнительных не потребуется. А если вы обновляете сборку на проекте, где уже был использованоCalabonga.UnitOfWork, то для использования новых методов достаточно указать явно тип слежения за изменениями. Пример кода без использования явного типа слежения:public async Task<IEnumerable<PictureFile>> GetFilesForPostAsync(Guid postId, CancellationToken cancellationToken) { var maps = await _unitOfWork .GetRepository<ImageMapLink>() .GetAllAsync(predicate: x => x.PostId == postId); // <= Error after update 5.0.x if (maps.Any()) { return maps.ToList().Select(x => new PictureFile(x.ImageSrc, x.MappedSrc!)); } return []; }
Достаточно явно добавить тип
public async Task<IEnumerable<PictureFile>> GetFilesForPostAsync(Guid postId, CancellationToken cancellationToken) { var maps = await _unitOfWork .GetRepository<ImageMapLink>() .GetAllAsync(predicate: x => x.PostId == postId, trackingType: TrackingType.NoTracking); // <= Add explicit value if (maps.Any()) { return maps.ToList().Select(x => new PictureFile(x.ImageSrc, x.MappedSrc!)); } return []; }
-
Методы, где используется параметр
disableTracking, помечены атрибутомobsolete, что означает, что в последующих версиях данные методы будут удалены. -
Исправлены дубликаты кода, возникшие при склеивании веток (спасибо Andrey).
- Обновлена версия сборки до .NET8.
IPagedList<T>вынесен в свой собственный nuget-пакетCalabogna.PagedListCore.- Обновлена документация https://calabonga.github.io/UnitOfWork/
- Обновлены nuget-пакеты EntityFramework
- Добавлены дополнительные параметры в методы
IRepository<T>для управленияAutoIncludes. - Обновлена документация https://calabonga.github.io/UnitOfWork/
- Сборка переведена на NET6.0. В проект был обновлен (Nullable = true)
- Обновлены методы на предмет обработки Nullable типов
- Удалена сборка AutoHistory по причине отсутствия поддержки ее NET6.0.
- EntityFramework Core и паттерны "Unit of Work" и "Repository" (ru)
- Документация API
- Блог по программированию
- Boosty.To
- Пишите комментарии к видео на сайте www.calabonga.net
