Unit of Work implementation for EntityFramework Core. For more information please see Calabonga.UnitOfWork package.
$ dotnet add package Calabonga.UnitOfWorkРеализация паттерна "Unit Of Work" для EntityFrameworkCore на платформе .NET. This is a Unit ofWork pattern implementation on .NET.
ServiceLifetime for IUnitOfWork added as a parameter during DI-container registration.FromSqlRawInterpolated implemented in IUnitOfWork from DbContext.TrackingType parameter instead of disableTracking.5.0.0 versionTrackingType parameter.Созданые перегрузки для всех методов, где используется параметр 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).
IPagedList<T> вынесен в свой собственный nuget-пакет Calabogna.PagedListCore.IRepository<T> для управления AutoIncludes.