using DD.Persistence.Database.Entity; using DD.Persistence.Models; using DD.Persistence.Repositories; using Mapster; using Microsoft.EntityFrameworkCore; namespace DD.Persistence.Database.Repositories; public class SchemePropertyRepository : ISchemePropertyRepository { protected DbContext db; public SchemePropertyRepository(DbContext db) { this.db = db; } protected virtual IQueryable GetQueryReadOnly() => db.Set(); public virtual async Task AddRange(DataSchemeDto dataSchemeDto, CancellationToken token) { var entities = dataSchemeDto.Select(e => KeyValuePair.Create(dataSchemeDto.DiscriminatorId, e) .Adapt() ); await db.Set().AddRangeAsync(entities, token); await db.SaveChangesAsync(token); } public virtual async Task Get(Guid dataSchemeId, CancellationToken token) { var query = GetQueryReadOnly() .Where(e => e.DiscriminatorId == dataSchemeId); var entities = await query.ToArrayAsync(token); DataSchemeDto? result = null; if (entities.Length != 0) { var properties = entities.Select(e => e.Adapt()).ToArray(); result = new DataSchemeDto(dataSchemeId, properties); } return result; } }