Entity Framework底层操作封装V2版本(5)

这个框架到现在最大的变化马上就要出现了,哪就是对缓存的使用。因为系统经常要去读取数据库数据,但是大家知道,数据库的处理能力是有限的,所以对于一些数据量不大,但是又 需要经常去读取的功能来说,更好的方法就是使用缓存。 上面4的方法是不适用缓存的

 

[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using JFrame.AccessCommon;  
  6. using System.Data.Objects.DataClasses;  
  7. using JFrame.Utility;  
  8. using System.Linq.Expressions;  
  9. using System.Reflection;  
  10.   
  11. namespace JFrame.Dal  
  12. {  
  13.     /// <summary>  
  14.     /// 使用缓存进行数据更新,缓存暂时只支持lamda表达式  
  15.     /// </summary>  
  16.     /// <typeparam name="T"></typeparam>  
  17.     public class DalBaseDataCache<T> : AccessBase<T> where T : EntityObject  
  18.     {  
  19.         static DataCacheCommon<T> CacheCommon; //DataCacheCommon<T>.Instance(GetListByWhere);  
  20.         public DalBaseDataCache()  
  21.             : base(ConnectionString: DataBaseConnectionString.GetConnectionString())  
  22.         {  
  23.             CacheCommon = DataCacheCommon<T>.Instance(GetListByWhere);  
  24.         }  
  25.   
  26.         public DalBaseDataCache(string PrimaryKey = "", string strTableName = "", string QueryColums = "")  
  27.             : base(ConnectionString: DataBaseConnectionString.GetConnectionString(), PrimaryKey: PrimaryKey, strTableName: strTableName, QueryColums: QueryColums)  
  28.         {  
  29.             CacheCommon = DataCacheCommon<T>.Instance(GetListByWhere);  
  30.         }  
  31.   
  32.   
  33.   
  34.         /// <summary>  
  35.         /// 增加单个实体  
  36.         /// </summary>  
  37.         /// <param name="t"></param>  
  38.         public virtual void AddEntity(T t)  
  39.         {  
  40.             Data.InsertEntity<T>(t);  
  41.             CacheCommon.Add(t);  
  42.         }  
  43.   
  44.         /// <summary>  
  45.         /// 获取单个实体  
  46.         /// </summary>  
  47.         /// <param name="query">查询条件</param>  
  48.         /// <returns></returns>  
  49.         public virtual T GetSingleEntity(Expression<Func<T, bool>> query)  
  50.         {  
  51.             return CacheCommon.GetDataList(query).FirstOrDefault(); //    Data.GetSingleEntity<T>(query);  
  52.         }  
  53.   
  54.   
  55.   
  56.         public virtual List<T> GetAllEntityByPage(Expression<Func<T, bool>> query, PagingInfo PageInfo, Func<T, object> orderByDesc)  
  57.         {  
  58.             return CacheCommon.GetDataList(query, PageInfo, orderByDesc);  
  59.         }  
  60.   
  61.   
  62.   
  63.   
  64.   
  65.         /// <summary>  
  66.         /// 获取单个实体  
  67.         /// </summary>  
  68.         /// <typeparam name="T">泛型类型参数</typeparam>  
  69.         /// <param name="express">查询条件</param>  
  70.         /// <returns></returns>  
  71.         public virtual T TryGetSingleEntity(Expression<Func<T, bool>> query)  
  72.         {  
  73.             try  
  74.             {  
  75.                 return CacheCommon.GetDataList(query).FirstOrDefault();// Data.GetSingleEntity<T>(query);  
  76.             }  
  77.             catch (Exception ex)  
  78.             {  
  79.                 return null;  
  80.             }  
  81.         }  
  82.   
  83.   
  84.         /// <summary>  
  85.         /// 修改单个实体  
  86.         /// </summary>  
  87.         /// <param name="t"></param>  
  88.         public virtual void UpdateEntity(T t)  
  89.         {  
  90.   
  91.             Type type = typeof(T);  
  92.             PropertyInfo[] infos = type.GetProperties();  
  93.             PropertyInfo info = infos.Where(p => p.Name == _PrimaryKey).FirstOrDefault();  
  94.             object value = null;  
  95.             if (info != null)  
  96.             {  
  97.                 value = info.GetValue(t, null);  
  98.             }  
  99.             else  
  100.             {  
  101.                 return;  
  102.             }  
  103.             Data.Update<T>(t, _PrimaryKey, value);  
  104.             CacheCommon.NextDataUpdate = DateTime.Now;  
  105.   
  106.         }  
  107.         /// <summary>  
  108.         /// 更新实体,不会从数据库同步  
  109.         /// </summary>  
  110.         /// <param name="t"></param>  
  111.         /// <param name="query"></param>  
  112.         public virtual void UpdateEntity(T t, Expression<Func<T, bool>> query)   
  113.         {  
  114.             Type type = typeof(T);  
  115.             PropertyInfo[] infos = type.GetProperties();  
  116.             PropertyInfo info = infos.Where(p => p.Name == _PrimaryKey).FirstOrDefault();  
  117.             object value = null;  
  118.             if (info != null)  
  119.             {  
  120.                 value = info.GetValue(t, null);  
  121.             }  
  122.             else  
  123.             {  
  124.                 return;  
  125.             }  
  126.             Data.Update<T>(t, _PrimaryKey, value);  
  127.             CacheCommon.Update(t, query.Compile());  
  128.         }  
  129.   
  130.         /// <summary>  
  131.         /// 根据条件删除信息  
  132.         /// </summary>  
  133.         /// <param name="query">条件</param>  
  134.         public virtual void Delete(Expression<Func<T, bool>> query)  
  135.         {  
  136.             Data.DeleteEntitys<T>(query);  
  137.             CacheCommon.Delete(query);  
  138.         }  
  139.   
  140.         /// <summary>  
  141.         /// (缓存中)根据条件获取相关监测信息表  
  142.         /// </summary>  
  143.         /// <param name="strWhere">Where条件</param>  
  144.         /// <returns>数据集合</returns>  
  145.         public virtual List<T> GetListByWhere(Expression<Func<T, bool>> query)  
  146.         {  
  147.   
  148.               
  149.   
  150.             //new System.Linq.Expressions.Expression.BinaryExpressionProxy  (query.Body)  
  151.             //(new System.Linq.Expressions.Expression.BinaryExpressionProxy((new System.Linq.Expressions.Expression.LambdaExpressionProxy(query)).Body)).DebugView  
  152.   
  153.   
  154.             return CacheCommon.GetDataList(query);  
  155.         }  
  156.   
  157.         /// <summary>  
  158.         /// 根据条件获取相关监测信息表  
  159.         /// </summary>  
  160.         /// <param name="strWhere">Where条件</param>  
  161.         /// <returns>数据集合</returns>  
  162.         public virtual List<T> GetALLCacheList()  
  163.         {  
  164.             return CacheCommon.GetDataList();  
  165.         }  
  166.          
  167.     }  
  168. }  

http://blog.csdn.net/jacky4955/article/details/25413509

posted @ 2014-12-30 14:58  关中秦人  阅读(141)  评论(0编辑  收藏  举报