using Infrastructure.Application; using Infrastructure.Data; using Infrastructure.Domain; using Infrastructure.Extensions; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; namespace IoT.Shared.Services { public class DataService { private readonly IServiceProvider _services; public DataService(IServiceProvider services) { this._services = services; } public void UpdateList(string message, Expression> predicate) where T : BaseEntity { using var scope = this._services.CreateScope(); var repo = scope.ServiceProvider.GetService>(); var list = message.FromJson>(); var entities = repo.Table().Where(predicate).Where(o => !list.Contains(o.Id)).ToList(); foreach (var entity in entities) { repo.Delete(entity); repo.SaveChanges(); } } #region private public void Update(string message, Expression> predicate = null) where T : BaseEntity { using var scope = this._services.CreateScope(); var repo = scope.ServiceProvider.GetService>(); var model = message.FromJson(); //delete entity where entity.Id!=model.Id if (predicate != null) { var entity2 = repo.Table().FirstOrDefault(predicate); if (entity2 != null && entity2.Id != model.Id) { repo.Delete(entity2); repo.SaveChanges(); } } var entity = repo.Table().FirstOrDefault(o => o.Id == model.Id); if (entity == null) { entity = Activator.CreateInstance(); repo.Add(entity); } entity.From(model); repo.SaveChanges(); } public T Edit(TEditModel model) where T : BaseEntity where TEditModel : EditModel { using var scope = this._services.CreateScope(); var repo = scope.ServiceProvider.GetService>(); var entity = repo.Table().FirstOrDefault(o => o.Id == model.Id); if (entity == null) { entity = Activator.CreateInstance(); repo.Add(entity); } entity.From(model); repo.SaveChanges(); return entity; } public void Delete(TEditModel model) where T : BaseEntity where TEditModel : EditModel { try { using var scope = this._services.CreateScope(); var repo = scope.ServiceProvider.GetService>(); var entity = repo.Table().FirstOrDefault(o => o.Id == model.Id); if (entity != null) { repo.Delete(entity); repo.SaveChanges(); } } catch (Exception ex) { ex.PrintStack(); } } #endregion private } }