using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Hncore.Infrastructure.Data; using Hncore.Infrastructure.DDD; using Hncore.Infrastructure.EntitiesExtension; namespace Hncore.Infrastructure.EF { public static class DbSetExtension { public static TEntity GetOne(this DbSet dbSet, Expression> exp) where TEntity : class { return dbSet.AsNoTracking().FirstOrDefault(exp); } public static Task GetOneAsync(this DbSet dbSet, Expression> exp) where TEntity : class { return dbSet.AsNoTracking().FirstOrDefaultAsync(exp); } public static PageData GetList(this DbSet dbSet, Expression> exp, int pagesize, int pageindex, bool istotal) where TEntity : class, IEntity { return dbSet.AsNoTracking() .Where(exp) .OrderByDescending(t => t.Id) .ListPager(pagesize, pageindex, istotal); } public static Task> GetListAsync(this DbSet dbSet, Expression> exp, int pagesize, int pageindex, bool istotal) where TEntity : class { return dbSet.AsNoTracking() .Where(exp) .ListPagerAsync(pagesize, pageindex, istotal); } public static List GetList(this DbSet dbSet, Expression> exp) where TEntity : class, IEntity { return dbSet.AsNoTracking() .Where(exp) .ToList(); } public static Task> GetListAsync(this DbSet dbSet, Expression> exp) where TEntity : class, IEntity { return dbSet.AsNoTracking() .Where(exp) .ToListAsync(); } public static IQueryable GetListQueryable(this DbSet dbSet, Expression> exp) where TEntity : class, IEntity { return dbSet.AsNoTracking() .Where(exp); } public static bool Exists(this DbSet dbSet, Expression> exp) where TEntity : class, IEntity { return dbSet.AsNoTracking() .Any(exp); } public static Task ExistsAsync(this DbSet dbSet, Expression> exp) where TEntity : class, IEntity { return dbSet.AsNoTracking() .AnyAsync(exp); } public static List TopN(this DbSet dbSet, Expression> condition, int topN) where TEntity : class, IEntity { return dbSet.AsNoTracking() .Where(condition) .TopN(topN) .ToList(); } public static Task> TopNAsync(this DbSet dbSet, Expression> condition, int topN) where TEntity : class, IEntity { return dbSet.AsNoTracking() .Where(condition) .TopN(topN) .ToListAsync(); } public static IQueryable GetQueryable(this DbSet dbSet) where TEntity : class { return dbSet.AsNoTracking(); } public static TEntity FindById(this DbSet dbSet,object id) where TEntity : class { return dbSet.Find(id); } public static Task FindByIdAsync(this DbSet dbSet, object id) where TEntity : class { return dbSet.FindAsync(id); } } }