using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using Yi.Framework.Common.Enum; using Yi.Framework.Interface; using Yi.Framework.Model.ModelFactory; namespace Yi.Framework.Service { public class BaseService : IBaseService where T : class, new() { public DbContext _Db; public DbContext _DbRead; public IDbContextFactory _DbFactory; public BaseService(IDbContextFactory DbFactory) { _DbFactory = DbFactory; _Db = DbFactory.ConnWriteOrRead(WriteAndReadEnum.Write); _DbRead = DbFactory.ConnWriteOrRead(WriteAndReadEnum.Read); } public async Task GetEntityById(int id) { return await _Db.Set().FindAsync(id); } public async Task> GetAllEntitiesAsync() { return await _Db.Set().ToListAsync(); } public async Task> GetEntitiesAsync(Expression> whereLambda) { return await _Db.Set().Where(whereLambda).ToListAsync(); } public async Task GetCountAsync(Expression> whereLambda) //统计数量 { return await _Db.Set().CountAsync(whereLambda); } public IQueryable> GetGroup(Expression> whereLambda, Expression> groupByLambda) //分组 { return _Db.Set().Where(whereLambda).GroupBy(groupByLambda).AsQueryable(); } public async Task, int>> GetPageEntities(int pageSize, int pageIndex, Expression> whereLambda, Expression> orderByLambda, bool isAsc) { int total = await GetCountAsync(whereLambda); IEnumerable pageData; if (isAsc) { pageData = await _Db.Set().Where(whereLambda) .OrderBy(orderByLambda) .Skip(pageSize * (pageIndex - 1)) .Take(pageSize).ToListAsync(); } else { pageData = await _Db.Set().Where(whereLambda) .OrderByDescending(orderByLambda) .Skip(pageSize * (pageIndex - 1)) .Take(pageSize).ToListAsync(); } return Tuple.Create, int>(pageData, total); } public async Task AddAsync(T entity) { _Db.Set().Add(entity); return await _Db.SaveChangesAsync() > 0; } public async Task AddAsync(IEnumerable entities) { _Db.Set().AddRange(entities); return await _Db.SaveChangesAsync() > 0; } public async Task UpdateAsync(T entity) { _Db.Set().Update(entity); return await _Db.SaveChangesAsync() > 0; } public async Task UpdateListAsync(IEnumerable entities) { _Db.Set().UpdateRange(entities); return await _Db.SaveChangesAsync() > 0; } public async Task DeleteAsync(T entity) { _Db.Set().Remove(entity); return await _Db.SaveChangesAsync() > 0; } public async Task DeleteAsync(int id) { _Db.Set().Remove(await GetEntityById(id)); return await _Db.SaveChangesAsync() > 0; } public async Task DeleteAsync(IEnumerable ids) { foreach (var id in ids) { _Db.Set().RemoveRange(await GetEntityById(id)); } return await _Db.SaveChangesAsync() > 0; } public async Task DeleteAsync(Expression> where) { IEnumerable entities = await GetEntitiesAsync(where); if (entities != null) { _Db.Set().RemoveRange(entities); return await _Db.SaveChangesAsync() > 0; } return false; } public async Task GetEntity(Expression> whereLambda) { return await _Db.Set().Where(whereLambda).FirstOrDefaultAsync(); } } }