Entity Framework底層操作封裝V2版本(5)

這個框架到現在最大的變化馬上就要出現了,哪就是對緩存的使用。因爲系統經常要去讀取數據庫數據,但是大家知道,數據庫的處理能力是有限的,所以對於一些數據量不大,但是又 需要經常去讀取的功能來說,更好的方法就是使用緩存。 上面4的方法是不適用緩存的

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using JFrame.AccessCommon;
using System.Data.Objects.DataClasses;
using JFrame.Utility;
using System.Linq.Expressions;
using System.Reflection;

namespace JFrame.Dal
{
    /// <summary>
    /// 使用緩存進行數據更新,緩存暫時只支持lamda表達式
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class DalBaseDataCache<T> : AccessBase<T> where T : EntityObject
    {
        static DataCacheCommon<T> CacheCommon; //DataCacheCommon<T>.Instance(GetListByWhere);
        public DalBaseDataCache()
            : base(ConnectionString: DataBaseConnectionString.GetConnectionString())
        {
            CacheCommon = DataCacheCommon<T>.Instance(GetListByWhere);
        }

        public DalBaseDataCache(string PrimaryKey = "", string strTableName = "", string QueryColums = "")
            : base(ConnectionString: DataBaseConnectionString.GetConnectionString(), PrimaryKey: PrimaryKey, strTableName: strTableName, QueryColums: QueryColums)
        {
            CacheCommon = DataCacheCommon<T>.Instance(GetListByWhere);
        }



        /// <summary>
        /// 增加單個實體
        /// </summary>
        /// <param name="t"></param>
        public virtual void AddEntity(T t)
        {
            Data.InsertEntity<T>(t);
            CacheCommon.Add(t);
        }

        /// <summary>
        /// 獲取單個實體
        /// </summary>
        /// <param name="query">查詢條件</param>
        /// <returns></returns>
        public virtual T GetSingleEntity(Expression<Func<T, bool>> query)
        {
            return CacheCommon.GetDataList(query).FirstOrDefault(); //    Data.GetSingleEntity<T>(query);
        }



        public virtual List<T> GetAllEntityByPage(Expression<Func<T, bool>> query, PagingInfo PageInfo, Func<T, object> orderByDesc)
        {
            return CacheCommon.GetDataList(query, PageInfo, orderByDesc);
        }





        /// <summary>
        /// 獲取單個實體
        /// </summary>
        /// <typeparam name="T">泛型類型參數</typeparam>
        /// <param name="express">查詢條件</param>
        /// <returns></returns>
        public virtual T TryGetSingleEntity(Expression<Func<T, bool>> query)
        {
            try
            {
                return CacheCommon.GetDataList(query).FirstOrDefault();// Data.GetSingleEntity<T>(query);
            }
            catch (Exception ex)
            {
                return null;
            }
        }


        /// <summary>
        /// 修改單個實體
        /// </summary>
        /// <param name="t"></param>
        public virtual void UpdateEntity(T t)
        {

            Type type = typeof(T);
            PropertyInfo[] infos = type.GetProperties();
            PropertyInfo info = infos.Where(p => p.Name == _PrimaryKey).FirstOrDefault();
            object value = null;
            if (info != null)
            {
                value = info.GetValue(t, null);
            }
            else
            {
                return;
            }
            Data.Update<T>(t, _PrimaryKey, value);
            CacheCommon.NextDataUpdate = DateTime.Now;

        }
        /// <summary>
        /// 更新實體,不會從數據庫同步
        /// </summary>
        /// <param name="t"></param>
        /// <param name="query"></param>
        public virtual void UpdateEntity(T t, Expression<Func<T, bool>> query) 
        {
            Type type = typeof(T);
            PropertyInfo[] infos = type.GetProperties();
            PropertyInfo info = infos.Where(p => p.Name == _PrimaryKey).FirstOrDefault();
            object value = null;
            if (info != null)
            {
                value = info.GetValue(t, null);
            }
            else
            {
                return;
            }
            Data.Update<T>(t, _PrimaryKey, value);
            CacheCommon.Update(t, query.Compile());
        }

        /// <summary>
        /// 根據條件刪除信息
        /// </summary>
        /// <param name="query">條件</param>
        public virtual void Delete(Expression<Func<T, bool>> query)
        {
            Data.DeleteEntitys<T>(query);
            CacheCommon.Delete(query);
        }

        /// <summary>
        /// (緩存中)根據條件獲取相關監測信息表
        /// </summary>
        /// <param name="strWhere">Where條件</param>
        /// <returns>數據集合</returns>
        public virtual List<T> GetListByWhere(Expression<Func<T, bool>> query)
        {

            

            //new System.Linq.Expressions.Expression.BinaryExpressionProxy  (query.Body)
            //(new System.Linq.Expressions.Expression.BinaryExpressionProxy((new System.Linq.Expressions.Expression.LambdaExpressionProxy(query)).Body)).DebugView


            return CacheCommon.GetDataList(query);
        }

        /// <summary>
        /// 根據條件獲取相關監測信息表
        /// </summary>
        /// <param name="strWhere">Where條件</param>
        /// <returns>數據集合</returns>
        public virtual List<T> GetALLCacheList()
        {
            return CacheCommon.GetDataList();
        }
       
    }
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章