using System.Collections.Generic; using System.Linq; using AsbCloudDb.Model; using AsbCloudApp.Services; using Mapster; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; namespace AsbCloudInfrastructure.Services { public class CrudService : ICrudService where TModel : class, AsbCloudDb.Model.IId where Tdto : AsbCloudApp.Data.IId { private readonly DbContext context; private readonly IAsbCloudDbContext db; private readonly DbSet dbSet; public CrudService(IAsbCloudDbContext db) { this.db = db; dbSet = context.Set(); } public IEnumerable GetAll(System.Linq.Expressions.Expression> predicate = null) { IQueryable entities = dbSet; if (predicate is not null) entities = entities.Where(predicate); var dto = entities.Adapt(); return dto; } public Tdto Get(int id) { var entity = dbSet.FirstOrDefault(e => e.Id == id); var dto = entity.Adapt(); return dto; } public Tdto Insert(Tdto newItem) { var newEntity = newItem.Adapt(); var dbEntity = dbSet.Add(newEntity); db.SaveChanges(); return dbEntity.Entity.Adapt(); } public IEnumerable InsertRange(IEnumerable newItems) { var newEntities = newItems.Adapt>(); var dbEntities = new Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry[newItems.Count()]; for (int i = 0; i < dbEntities.Length; i++) dbEntities[i] = dbSet.Add(newEntities.ElementAt(i)); db.SaveChanges(); return dbEntities.Select(e => e.Entity.Adapt()); } public Tdto Update(Tdto item) { var newEntity = item.Adapt(); var dbEntity = dbSet.Update(newEntity); db.SaveChanges(); return dbEntity.Entity.Adapt(); } public int Delete(int id) { var entity = dbSet.FirstOrDefault(e => e.Id == id); if (entity == default) return 0; dbSet.Remove(entity); return db.SaveChanges(); } } }