一个简单的基于EntityQuery的 PDF.NET SOD CURD 帮助类 CURDHelper.cs

写了一个简单的基于EntityQuery的 PDF.NET SOD CURD 帮助类,以后使用再继续扩展。

其中的引用 using Cxw.Common; 是缓存类的程序集,有用的该类的请自行替换。


CURDHelper.cs:

using System;
using System.Linq;
using System.Collections.Generic;
using PWMIS.DataMap.Entity;
using PWMIS.DataProvider.Adapter;
using PWMIS.Core.Extensions;
using Cxw.Common;

namespace BLL
{
    public class CURDHelper<T> where T : EntityBase, new()
    {
        static PWMIS.DataProvider.Data.AdoHelper db
        {
            get { return MyDB.GetDBHelper(); }
        }

        #region  基础操作

        /// <summary>
        /// 插入一条数据
        /// </summary>
        /// <param name="entity">实体类</param>
        /// <param name="dirDB">AdoHelper实例</param>
        /// <returns></returns>
        public static bool Insert(T entity, PWMIS.DataProvider.Data.AdoHelper dirDB = null)
        {
            EntityQuery<T> query = new EntityQuery<T>(dirDB ?? db);
            return query.Insert(entity) > 0;
        }

        /// <summary>
        /// 更新一条数据
        /// </summary>
        /// <param name="entity">实体类</param>
        /// <param name="dirDB">AdoHelper实例</param>
        /// <returns></returns>
        public static bool Update(T entity, PWMIS.DataProvider.Data.AdoHelper dirDB = null)
        {
            EntityQuery<T> query = new EntityQuery<T>(dirDB ?? db);
            return query.Update(entity) > 0;
        }

        /// <summary>
        /// 删除一条数据
        /// </summary>
        /// <param name="entity">实体类</param>
        /// <param name="dirDB">AdoHelper实例</param>
        /// <returns></returns>
        public static bool Delete(T entity, PWMIS.DataProvider.Data.AdoHelper dirDB = null)
        {
            EntityQuery<T> query = new EntityQuery<T>(dirDB ?? db);
            return query.Delete(entity) > 0;
        }

        /// <summary>
        /// 保存一条数据
        /// </summary>
        /// <param name="entity">实体类</param>
        /// <param name="dirDB">AdoHelper实例</param>
        /// <returns></returns>
        /// <remarks>该方法会自动探测实体对象是新增的还是修改的,如果要求较快速度,请调用Insert或者Update方法</remarks>
        public static bool Save(T entity, PWMIS.DataProvider.Data.AdoHelper dirDB = null)
        {
            EntityQuery<T> query = new EntityQuery<T>(dirDB ?? db);
            query.CurrentEntity = entity;
            return query.SaveAllChanges() > 0;
        }

        /// <summary>
        /// 得到一个实体对象
        /// </summary>
        /// <param name="primaryKeys">单主键名</param>
        /// <param name="id">单主键</param>
        /// <returns></returns>
        public static T GetEntity<U>(string primaryKey, U id)
        {
            T entity = new T();
            entity[primaryKey] = id;
            return EntityQuery<T>.Fill(entity) ? entity : null;
        }

        /// <summary>
        /// 得到一个实体对象
        /// </summary>
        /// <param name="primaryKeys">键值列表</param>
        /// <param name="ids">值列表</param>
        /// <returns></returns>
        public static T GetEntity<U>(string[] primaryKeys, U[] ids)
        {
            if (primaryKeys.Length != ids.Length)
            {
                throw new ArgumentException("实体类的主键字段列表与值列表数量不匹配!");
            }
            T entity = new T();
            for(var i=0;i< primaryKeys.Length; i++)
            {
                entity[primaryKeys[i]] = ids[i];
            }
            return EntityQuery<T>.Fill(entity) ? entity : null;
        }

        /// <summary>
        /// 获取所有实体列表
        /// </summary>
        public static List<T> GetAllList()
        {
            return OQL.From<T>().Select().END.ToList();
        }


        #endregion 基础操作

        #region  缓存

        #region  实体缓存

        /// <summary>
        /// 从实体缓存得到一个实体对象
        /// </summary>
        /// <param name="cacheKey">缓存键</param>
        /// <param name="primaryKeys">单主键名</param>
        /// <param name="id">单主键</param>
        /// <returns>实体对象或null</returns>
        public static T GetCacheEntity<U>(string cacheKey, string primaryKey, U id)
        {
            cacheKey += id.ToString();
            T entity = Cxw.Common.CacheHelper.Instance.GetOrDefault<T>(cacheKey);
            if (entity.IsNullOrDBNull() && !(entity = GetEntity(primaryKey, id)).IsNullOrDBNull())
            {
                Cxw.Common.CacheHelper.Instance.Insert(cacheKey, entity);
            }

            return entity;
        }

        #endregion 实体缓存

        #region  列表缓存

        /// <summary>
        /// 从列表缓存得到一个实体对象
        /// </summary>
        /// <param name="id">主键</param>
        /// <returns>实体对象或null</returns>
        public static T GetEntityFromCacheList<U>(string cacheKey, string primaryKey, object id)
        {
            return GetCacheList(cacheKey)?.FirstOrDefault(c => c[primaryKey] == id) ?? null;
        }

        /// <summary>
        /// 从列表缓存得到一个实体对象
        /// </summary>
        /// <param name="id">主键</param>
        /// <returns>实体对象或null</returns>
        public static T GetEntityFromCacheList<U>(string cacheKey, string[] primaryKeys, object[] ids)
        {
            return GetCacheList(cacheKey)?.FirstOrDefault(c =>
            {
                for (var i = 0; i < primaryKeys.Length; i++)
                {
                    if (!(c[primaryKeys[i]] == ids[i])) return false;
                }
                return true;
            }) ?? null;
        }

        /// <summary>
        /// 从缓存得到一个实体对象列表,没有结果则返回new List<T>()
        /// </summary>
        /// <param name="cacheKey">缓存键</param>
        /// <returns>List<T></returns>
        public static List<T> GetCacheList(string cacheKey)
        {
            List<T> lst = Cxw.Common.CacheHelper.Instance.GetOrDefault<List<T>>(cacheKey);
            if (lst.IsNullOrDBNull())
            {
                lst = OQL.From<T>().Select().END.ToList();
                if (lst.Count > 0)
                {
                    Cxw.Common.CacheHelper.Instance.Insert(cacheKey, lst);
                }
                else
                {
                    Cxw.Common.CacheHelper.Instance.Remove(cacheKey);
                }
            }

            return lst;
        }

        #endregion 列表缓存

        #endregion 缓存
    }
}




        /// <param name="dirDB">AdoHelper实例</param>

        /// <param name="dirDB">AdoHelper实例</param>

        /// <param name="dirDB">AdoHelper实例</param>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值