这个框架到如今最大的变化立即就要出现了,哪就是对缓存的使用。由于系统常常要去读取数据库数据。可是大家知道。数据库的处理能力是有限的,所以对于一些数据量不大,可是又 须要常常去读取的功能来说。更好的方法就是使用缓存。 上面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();
} }
}

 

Entity Framework底层操作封装V2版本号(5)的更多相关文章

  1. Entity Framework底层操作封装V2版本号(4)

    这个版本号里面.由于涉及到了多库的操作.原有的系统方法不能做到这种事情了.所以这里有了一点差别 这个类的主要用作就是,连接字符串的作用,默认是指向默认配置里面的,可是你能够指向其它的连接 using ...

  2. Entity Framework底层操作封装V2版本号(2)

    这个类是真正的数据库操作类.上面的那个类仅仅是调用了这个封装类的方法进行的操作 using System; using System.Collections.Generic; using System ...

  3. Entity Framework底层操作封装V2版本号(1)

    由于同志们一直给我提建议说.曾经发的版本号有问题.所以经过了我这一年多的使用和扩展,如今方法基本稳定了. 如今贴出来给大家使用: 首先上场的是数据库操作层: using System; using S ...

  4. Entity Framework底层操作封装V2版本号(3)

    如今是附加的,组合查询须要的扩展类.大家知道lanmda表达式的组合条件比較麻烦,所以就加了一样一个类,方便进行组合查询: using System; using System.Collections ...

  5. entity framework 时间操作

    ).FirstOrDefault(); if (useractiveentity == null) { UserActive userActive = new UserActive(); userAc ...

  6. .NET Entity Framework入门操作

    Entity Framework是微软借鉴ORM思想开发自己的一个ORM框架. ORM就是将数据库表与实体对象(相当于三层中的Model类)相互映射的一种思想. 最大的优点就是非常方便的跨数据库平台. ...

  7. UWP: 在 UWP 中使用 Entity Framework Core 操作 SQLite 数据库

    在应用中使用 SQLite 数据库来存储数据是相当常见的.在 UWP 平台中要使用 SQLite,一般会使用 SQLite for Universal Windows Platform 和 SQLit ...

  8. Entity Framework 基础操作(1)

    EF是微软推出的官方ORM框架,默认防注入可以配合LINQ一起使用,更方便开发人员. 首先通过SQLSERVER现在有的数据库类生产EF 右键->添加->新建项,选择AOD.NET实体数据 ...

  9. 实体框架Entity Framework 4.1快速入门

    介 绍 在旧的Entity 框架中,开发者可以从已存在的数据库中产生业务实体的模型,这种开发方法被称为数据库驱动的开发方法.而在4.1的Entity Framework中,支开发者先创建实体业务类,然 ...

随机推荐

  1. Vue.js Ajax(axios)

    Vue.js 2.0 版本推荐使用 axios 来完成 ajax 请求. Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中. Github开源地址: ht ...

  2. VIM 代码自动补全, YouCompleteMe安装及配置

    效果 下载 使用Vundle安装 YCM 1. 安装Vundle window用户安装vundle参考这里:Windows下 vundle的安装和使用 2.

  3. org.apache.ibatis.binding.BindingException: Parameter 'xxx' not found. Available parameters are [arg1, arg0, param1, param2]

    这个异常说明参数没有加上@Param注解,加上这个注解就行了. 默认情况下mybatis把参数按顺序转化为[0, 1, param1, param2],也就是说#{0} 和 #{param1} 是一样 ...

  4. 04.基本数据类型(list,tuple)

    本节主要内容:1. 列表2. 列表的增删改查3. 列表的嵌套4. 元组和元组嵌套5. range一. 列表1.1 列表的介绍 列表是python的基础数据类型之一 ,其他编程语言也有类似的数据类型. ...

  5. java读写属性配置文件

    package readproperties; import java.io.FileInputStream; import java.io.IOException; import java.io.I ...

  6. 搞笑:Java & PHP & C++ 之间的战斗!

    Java 拥有十八般武艺,PHP一招致命!PHP 果然是世界上最好的编程语言~ Java 连老将 C++ 也干不过,直接一招 KO,我也是醉了... 这里并不是贬低Java,只有资深老司机能看懂的图吧 ...

  7. 18.scrapy_maitian_analysis

    1_info.py # encoding: utf-8 import pandas as pd # 租房 基本信息 # 读取文件 df=dataframe df = pd.read_json(&quo ...

  8. 为什么不直接使用socket ,还要定义一个新的websocket 的呢

    大致概念: TCP/IP 协议,是网络七层协议的第四层,本身没有长连接或短连接的区别: HTTP 是基于 TCP 协议之上的「短连接」应用层协议,它的出现极大简化了网络应用的实现门槛,丰富了应用: S ...

  9. Android 开发 MediaRecorder使用Camera1配合录制视频

    前言 MediaRecorder可以不依靠Camera API 实现视频的录制,但是如果需要切换摄像头/设置对焦/选择分辨率等等就需要Camera来参与配合录制视频.这篇博客将介绍使用Camera1来 ...

  10. 廖雪峰Java12maven基础-1maven入门-3构建流程

    maven是一个Java项目管理和构建工具: 标准化项目结构 标准化构建流程(编译.打包.发布) 依赖管理 Maven的构建流程 clean 删除所有编译生成的文件 compile 编译源码.编译测试 ...