EF操作数据库工具类(通过Lambda语句)

4 篇文章 0 订阅

 public class BaseDBService<T> where T : BaseModel
    {
        private readonly EFCoreFirst Context;
        private IDbSet<T> _entities;


        public BaseDBService()
        {
            Context = new EFCoreFirst();
        }

        public void Delete(long Id)
        {
            try
            {
                var data = Get(Id).FirstOrDefault();
                if (data != null)
                {
                    Entities.Remove(data);
                    Context.SaveChanges();
                }
                
            }
            catch
            {
            }
        }

        public IQueryable<T> Get(long id)
        {
            try
            {
                var sql = Entities.Where(x=>x.Id==id);
                return sql;
            }
            catch
            {
                return null;
            }
        }

        public IQueryable<T> Query()
        {
            try
            {
                var sql = Entities.AsQueryable();
                return sql;
            }
            catch
            {
                return null;
            }
        }

        /// <summary>
        /// 翻页查询
        /// </summary>
        /// <typeparam name="Tkey"></typeparam>
        /// <param name="pageSize">每页大小</param>
        /// <param name="pageIndex">第几页</param>
        /// <param name="total">总数</param>
        /// <param name="whereLambda">查询条件</param>
        /// <param name="orderbyLambda">排序条件</param>
        /// <param name="isAsc">是否升序</param>
        /// <returns></returns>
        public IQueryable<T> LoadPageItems<Tkey>(int pageSize, int pageIndex, out int total, Expression<Func<T, bool>> whereLambda, Func<T, Tkey> orderbyLambda, bool isAsc)
        {
            total = Entities.Where(whereLambda).Count(); 
            if (isAsc)
            {
                var temp = Entities.Where(whereLambda).OrderBy<T, Tkey>(orderbyLambda)
               .Skip(pageSize * (pageIndex - 1))
               .Take(pageSize);
                return temp.AsQueryable();
            }
            else
            {
                var temp = Entities.Where(whereLambda).OrderByDescending<T, Tkey>(orderbyLambda)
                    .Skip(pageSize * (pageIndex - 1))
                    .Take(pageSize);
                return temp.AsQueryable();
            }
        }

        public IQueryable<T> Query(Expression<Func<T, bool>> where)
        {
            return Query().Where(where);
        }

        public T Save(T Model)
        {
            if (Model.Id <= 0)
            {
                Add(Model);
                return Model;
            }
            else
            {
                Update(Model);
                return Model;
            }

        }

        private void Update(T model)
        {
            Entities.Attach(model);
            ((IObjectContextAdapter)this.Context).ObjectContext.ObjectStateManager.ChangeObjectState(model, EntityState.Modified);
            Context.SaveChanges();
        }

        private void Add(T model)
        {
            model.GUID = Guid.NewGuid().ToString();
            model.IsDelet =false;
            model.DateCreated = DateTime.Now;
            Entities.Add(model);
            Context.SaveChanges();
        }

        /// <summary>
        /// 设置当前实体类的上下文实体
        /// </summary>
        protected virtual IDbSet<T> Entities
        {
            get
            {
                if (_entities == null)
                {

                    _entities = Context.Set<T>();
                }
                return _entities;
            }
        }


    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧方

开发程序不易

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值