using Microsoft.EntityFrameworkCore; using Mini.Common; using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Linq.Expressions; using System.Text; namespace Mini.Model { public class EfRepository : EfRepositoryBase where T : BaseEntity { private readonly DbContext _context; private DbSet _entities; protected EfRepository(DbContext context) { this._context = new crmContext(); } protected virtual DbSet Entities { get { if (_entities == null) _entities = _context.Set(); return _entities; } } public override T Get(Expression> @where) { return this.Entities.FirstOrDefault(where); } public override IQueryable GetList() { return GetList(null); } public override IQueryable GetList(Expression> @where) { if (where != null) { return this.Entities.Where(where).AsNoTracking(); } return this.Entities; } public override IQueryable GetList(Expression> @where, Expression> orderBy = null, SortOrder sortOrder = SortOrder.Descending) { if (orderBy == null) { return this.Entities.Where(where); } else { if (sortOrder == SortOrder.Descending) return this.Entities.Where(where).OrderByDescending(orderBy); else return this.Entities.Where(where).OrderBy(orderBy); } } public override IQueryable GetList(Expression> orderBy, int pageindex, int pagesize, out int totalRecords, SortOrder sortOrder = SortOrder.Descending) { return GetList(null, orderBy, pageindex, pagesize, out totalRecords, sortOrder); } public override IQueryable GetList(Expression> @where, Expression> orderBy, int pageindex, int pagesize, out int totalRecords, SortOrder sortOrder = SortOrder.Descending) { if (pageindex < 1) throw new ArgumentException("pageindex"); if (pagesize < 1) throw new ArgumentException("pagesize"); int skip = (pageindex - 1) * pagesize; var _query = this.Entities.AsQueryable().AsNoTracking(); if (null != where) _query = _query.Where(where); totalRecords = _query.Count(); if (sortOrder == SortOrder.Descending) { _query = _query.OrderByDescending(orderBy); } else _query = _query.OrderBy(orderBy); return _query.Skip(skip).Take(pagesize); } public override IQueryable GetList(Expression> @where, Expression> orderBy, Pager pg, SortOrder sortOrder = SortOrder.Descending) { int totalRecords; var list = GetList(where, orderBy, pg.page, pg.rows, out totalRecords, sortOrder); pg.totalRows = totalRecords; return list; } public override int Add(T entity) { try { if (entity == null) throw new ArgumentNullException(); this.Entities.Add(entity); return this._context.SaveChanges(); } catch (Exception dbEx) { throw dbEx; } } public override void AddList(IEnumerable entities) { try { if (entities == null) throw new ArgumentNullException(); foreach (var entity in entities) this.Entities.Add(entity); this._context.SaveChanges(); } catch (Exception dbEx) { throw dbEx; } } public override bool Update(T entity) { try { if (entity == null) throw new ArgumentNullException(); return this._context.SaveChanges() > 0; } catch (Exception dbEx) { throw dbEx; } } public override void Update(IEnumerable entities) { try { if (entities == null) throw new ArgumentNullException(); this._context.SaveChanges(); } catch (Exception dbEx) { throw dbEx; } } public override void Delete(T entity) { try { if (entity == null) throw new ArgumentNullException(); this.Entities.Remove(entity); this._context.SaveChanges(); } catch (Exception dbEx) { throw dbEx; } } public override void Delete(IEnumerable entities) { try { if (entities == null) throw new ArgumentNullException(); foreach (var entity in entities) this.Entities.Remove(entity); this._context.SaveChanges(); } catch (Exception dbEx) { throw dbEx; } } public override IQueryable Table { get { return this.Entities; } } //protected string GetFullErrorText(Exception exc) //{ // var msg = string.Empty; // foreach (var validationErrors in exc.EntityValidationErrors) // foreach (var error in validationErrors.ValidationErrors) // msg += string.Format("Property: {0} Error: {1}", error.PropertyName, error.ErrorMessage) + Environment.NewLine; // return msg; //} } }