using CC.Yi.IDAL; using CC.Yi.Model; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; namespace CC.Yi.DAL { public class BaseDal : IBaseDal where T : class, new() { public DbContext Db { get { return DbContentFactory.GetCurrentDbContent(); } } public IQueryable GetEntities(Expression> whereLambda) { return Db.Set().Where(whereLambda).AsQueryable(); } public IQueryable GetAllEntities() { return Db.Set().AsQueryable(); } public int GetCount(Expression> whereLambda) { return Db.Set().Where(whereLambda).Count(); } public IQueryable> GetGroup(Expression> whereLambda, Expression> groupByLambda) //分组 { return Db.Set().Where(whereLambda).GroupBy(groupByLambda).AsQueryable(); } public IQueryable GetPageEntities(int pageSize, int pageIndex, out int total, Expression> whereLambda, Expression> orderByLambda, bool isAsc) { total = Db.Set().Where(whereLambda).Count(); if (isAsc) { var pageData = Db.Set().Where(whereLambda) .OrderBy(orderByLambda) .Skip(pageSize * (pageIndex - 1)) .Take(pageSize).AsQueryable(); return pageData; } else { var pageData = Db.Set().Where(whereLambda) .OrderByDescending(orderByLambda) .Skip(pageSize * (pageIndex - 1)) .Take(pageSize).AsQueryable(); return pageData; } } public T Add(T entity) { Db.Set().Add(entity); //Db.SaveChanges(); return entity; } public bool AddRange(IEnumerable entities) { Db.Set().AddRange(entities); return true; } public bool Update(T entity) { //所有字段均修改 Db.Entry(entity).State = EntityState.Modified; //return Db.SaveChanges() > 0; return true; } public bool Update(T entity, params string[] propertyNames) { EntityEntry entry = Db.Entry(entity); entry.State = EntityState.Unchanged; foreach (var item in propertyNames) { entry.Property(item).IsModified = true; } return true; } public bool Delete(T entity) { Db.Entry(entity).State = EntityState.Deleted; //return Db.SaveChanges() > 0; return true; } public bool Detete(int id) { var entity = Db.Set().Find(id);//根据id找到实体 Db.Set().Remove(entity);//由于这里先Find找到了实体,所以这里可以用Remove标记该实体要移除(删除)。如果不是先Find到实体就需要用System.Data.Entity.EntityState.Deleted return true; } public bool DeteteRange(IEnumerable entity) { Db.Set().RemoveRange(entity); return true; } } }