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();
}
}
}
Entity Framework底层操作封装V2版本号(5)的更多相关文章
- Entity Framework底层操作封装V2版本号(4)
这个版本号里面.由于涉及到了多库的操作.原有的系统方法不能做到这种事情了.所以这里有了一点差别 这个类的主要用作就是,连接字符串的作用,默认是指向默认配置里面的,可是你能够指向其它的连接 using ...
- Entity Framework底层操作封装V2版本号(2)
这个类是真正的数据库操作类.上面的那个类仅仅是调用了这个封装类的方法进行的操作 using System; using System.Collections.Generic; using System ...
- Entity Framework底层操作封装V2版本号(1)
由于同志们一直给我提建议说.曾经发的版本号有问题.所以经过了我这一年多的使用和扩展,如今方法基本稳定了. 如今贴出来给大家使用: 首先上场的是数据库操作层: using System; using S ...
- Entity Framework底层操作封装V2版本号(3)
如今是附加的,组合查询须要的扩展类.大家知道lanmda表达式的组合条件比較麻烦,所以就加了一样一个类,方便进行组合查询: using System; using System.Collections ...
- entity framework 时间操作
).FirstOrDefault(); if (useractiveentity == null) { UserActive userActive = new UserActive(); userAc ...
- .NET Entity Framework入门操作
Entity Framework是微软借鉴ORM思想开发自己的一个ORM框架. ORM就是将数据库表与实体对象(相当于三层中的Model类)相互映射的一种思想. 最大的优点就是非常方便的跨数据库平台. ...
- UWP: 在 UWP 中使用 Entity Framework Core 操作 SQLite 数据库
在应用中使用 SQLite 数据库来存储数据是相当常见的.在 UWP 平台中要使用 SQLite,一般会使用 SQLite for Universal Windows Platform 和 SQLit ...
- Entity Framework 基础操作(1)
EF是微软推出的官方ORM框架,默认防注入可以配合LINQ一起使用,更方便开发人员. 首先通过SQLSERVER现在有的数据库类生产EF 右键->添加->新建项,选择AOD.NET实体数据 ...
- 实体框架Entity Framework 4.1快速入门
介 绍 在旧的Entity 框架中,开发者可以从已存在的数据库中产生业务实体的模型,这种开发方法被称为数据库驱动的开发方法.而在4.1的Entity Framework中,支开发者先创建实体业务类,然 ...
随机推荐
- 关于Ubuntu锁屏后,无法输入密码
屏幕锁定后字母密码无法输入,数字可以,切换用户然后可以正常输入密码登陆. 是输入法的事,锁屏界面依然是中文输入法,然后输入字母之后先不会显示然后加上数字后是汉字密码不对. 切换输入法到英文,就可以正常 ...
- quartz的job中注入spring对象!
一般情况下,quartz的job中使用autowired注解注入的对象为空,这时候我们就要使用spring-quartz提供的AdaptableJobFactory类. 自定义一个类: public ...
- 小程序跳坑 --- navigator 和 API中wx.系列的跳转(如 wx.navigateTo、wx.reLaunch等)
工作之余,想着帮老妈开发个小程序,一是宣传一下她的业务,二是学习使用一下微信小程序的开发,哈哈.在此过程中遇到了navigator跳转的问题,最终还是成功解决了,下面就记录下来,并做个系列总结以作记录 ...
- vue swiper异步加载轮播图,并且懒加载
参考:https://blog.csdn.net/weixin_38304202/article/details/78282826 效果: 此处安装省略 vue: <div class=&quo ...
- vue_cli 安装
1.安装node 2.cmd node-v3.如果是刚刚安装输入 node-v 会成功出现版本 如果不是全局安装 过段时间输入 node-v会出现 'node' 不是内部或外部命令,也不是可运行的程序 ...
- Android开发 ShapeDrawable详解
前言 ShapeDrawable一开始我以为它是对应xml文件属性里的shape的画图,后来发现我错了... 其实ShapeDrawable更像是一共自由度更大跟偏向与实现draw()方法的一共图像绘 ...
- Jquery实现图片瀑布流思路-简单版
目录 Jquery实现图片瀑布流思路-简单版 1.预备 2.开始 1.声明 2.主体 3.窗体大小改变事件 Jquery实现图片瀑布流思路-简单版 注意:本篇文章基于知道每张图片的实际尺寸的情况下 特 ...
- Ubuntu GitHub操作——分支、合并与标签
分支 分支是用来将特性开发绝缘开来的.在你创建仓库的时候,master 是"默认的"分支.在其他分支上进行开发,完成后再将它们合并到主分支上. 创建一个叫做"featur ...
- Cannot find module '@babel/plugin-proposal-class-properties'
cnpm install --save-dev @babel/plugin-proposal-class-properties
- centos 6 编译glibc-2.14
1.查看系统版本, 升级系统基本lib库 [root@test ~]# cat /etc/redhat-release CentOS release 6.5 (Final) 2.查看系统glibc支持 ...