using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace HxDbContext { public class MySqlEF where T : class, new() { public readonly DbContext _db = EFDbContextFactory.GetCurrentDbContext(); //public async Task AddAsync(T entity) //{ // _db.Entry(entity).State = EntityState.Added; // await _db.SaveChangesAsync(); // return entity; //} public T Add(T entity) { _db.Entry(entity).State = EntityState.Added; _db.SaveChanges(); return entity; } //public async Task UpdateAsync(T entity) //{ // _db.Set().Attach(entity); // _db.Entry(entity).State = EntityState.Modified; // await _db.SaveChangesAsync(); // return entity; //} public T Update(T entity) { _db.Set().Attach(entity); _db.Entry(entity).State = EntityState.Modified; _db.SaveChanges(); return entity; } //public async Task DeleteAsync(T entity) //{ // _db.Set().Attach(entity); // _db.Entry(entity).State = EntityState.Deleted; // int result = await _db.SaveChangesAsync(); // return result > 0; //} public bool Delete(T entity) { _db.Set().Attach(entity); _db.Entry(entity).State = EntityState.Deleted; int result = _db.SaveChanges(); return result > 0; } //public async Task GetModelAsync(Expression> whereLambda) //{ // T _entity = await _db.Set().AsNoTracking().FirstOrDefaultAsync(whereLambda); // return _entity; //} public T GetModel(Expression> whereLambda) { T _entity = _db.Set().AsNoTracking().FirstOrDefault(whereLambda); return _entity; } //public async Task> GetListAsync(Expression> whereLambda) //{ // var _list = await _db.Set().AsNoTracking().Where(whereLambda).ToListAsync(); // return _list; //} public IList GetList(Expression> whereLambda) { var _list = new List(); if (whereLambda == null) { _list = _db.Set().ToList(); } else { _list = _db.Set().AsNoTracking().Where(whereLambda).ToList(); } return _list; } public IList GetList(int topNum, Expression> whereLambda, Expression> orderByLambda, bool isAsc) { var _list = new List(); if (whereLambda == null) { if (isAsc) _list = _db.Set().OrderBy(orderByLambda).ToList(); else _list = _db.Set().OrderByDescending(orderByLambda).ToList(); } else { if (isAsc) _list = _db.Set().AsNoTracking().Where(whereLambda).OrderBy(orderByLambda).Take(topNum).ToList(); else _list = _db.Set().AsNoTracking().Where(whereLambda).OrderByDescending(orderByLambda).Take(topNum).ToList(); } return _list; } //public async Task, int>> GetPageAsync(int pageSize, int pageIndex, Expression> whereLambda, Expression> orderByLambda, bool isAsc) //{ // var _list = _db.Set().AsNoTracking().Where(whereLambda); // int totalRecord = _list.Count() == 0 ? 1 : _list.Count(); // IList resultList; // if (isAsc) // resultList = await _list.OrderBy(orderByLambda).Skip(pageSize * (pageIndex - 1)).Take(pageSize).ToListAsync(); // else // resultList = await _list.OrderByDescending(orderByLambda).Skip(pageSize * (pageIndex - 1)).Take(pageSize).ToListAsync(); // return new Tuple, int>(resultList, totalRecord); //} public Tuple, int> GetPage(int pageSize, int pageIndex, Expression> whereLambda, Expression> orderByLambda, bool isAsc) { try { var _list = _db.Set().AsNoTracking().Where(whereLambda); int totalRecord = _list.Count() == 0 ? 1 : _list.Count(); IList resultList; if (isAsc) resultList = _list.OrderBy(orderByLambda).Skip(pageSize * (pageIndex - 1)).Take(pageSize).ToList(); else resultList = _list.OrderByDescending(orderByLambda).Skip(pageSize * (pageIndex - 1)).Take(pageSize).ToList(); return new Tuple, int>(resultList, totalRecord); } catch (Exception ex) { } return null; } } }