You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iot/projects/IoT.Shared/Services/DataService.cs

104 lines
3.3 KiB

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<T>(string message, Expression<Func<T, bool>> predicate) where T : BaseEntity
{
using var scope = this._services.CreateScope();
var repo = scope.ServiceProvider.GetService<IRepository<T>>();
var list = message.FromJson<List<Guid>>();
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<T>(string message, Expression<Func<T, bool>> predicate = null) where T : BaseEntity
{
using var scope = this._services.CreateScope();
var repo = scope.ServiceProvider.GetService<IRepository<T>>();
var model = message.FromJson<T>();
//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<T>();
repo.Add(entity);
}
entity.From(model);
repo.SaveChanges();
}
public T Edit<T, TEditModel>(TEditModel model)
where T : BaseEntity
where TEditModel : EditModel
{
using var scope = this._services.CreateScope();
var repo = scope.ServiceProvider.GetService<IRepository<T>>();
var entity = repo.Table().FirstOrDefault(o => o.Id == model.Id);
if (entity == null)
{
entity = Activator.CreateInstance<T>();
repo.Add(entity);
}
entity.From(model);
repo.SaveChanges();
return entity;
}
public void Delete<T, TEditModel>(TEditModel model)
where T : BaseEntity
where TEditModel : EditModel
{
try
{
using var scope = this._services.CreateScope();
var repo = scope.ServiceProvider.GetService<IRepository<T>>();
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
}
}