闲暇之余,整理了一下EF底层的一些基础方法,供查看,只有接口,具体实现需要你们自己写了。

  建议:接口的实现定义为虚方法,当父类的方法不满住子类需求时,可以重写此方法

  此接口都为公用方法,基本上满足小系统的实际开发需求,如果你觉得满足不了你,可以扩展此接口。

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks; namespace Basic.IRepository
{
public interface ICommonRepository<T> where T : class, new()
{
#region Other /// <summary>
/// 确定序列中的任何元素是否都满足条件
/// </summary>
/// <param name="whereLambda"></param>
/// <returns></returns>
bool Any(Expression<Func<T, bool>> whereLambda); /// <summary>
/// 返回序列中元素的数量
/// </summary>
/// <param name="whereLambda"></param>
/// <returns></returns>
int Count(Expression<Func<T, bool>> whereLambda); /// <summary>
/// 返回最大值
/// </summary>
/// <typeparam name="Tkey"></typeparam>
/// <param name="predicate"></param>
/// <param name="selector"></param>
/// <returns></returns>
Tkey Max<Tkey>(Expression<Func<T, bool>> whereLambda, Func<T, Tkey> selector); /// <summary>
/// 返回分组查询的数量
/// </summary>
/// <typeparam name="TKey"></typeparam>
/// <param name="whereLambda"></param>
/// <param name="groupBy"></param>
/// <returns></returns>
IDictionary<TKey, int> Count<TKey>(Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> groupBy); /// <summary>
/// 分组求和
/// </summary>
/// <typeparam name="TKey"></typeparam>
/// <param name="whereLambda"></param>
/// <param name="groupBy"></param>
/// <param name="selector"></param>
/// <returns></returns>
IDictionary<TKey, decimal> Sum<TKey>(Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> groupBy, Func<T, decimal> selector); /// <summary>
/// 获取表名
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
string GetTableName(Type type); /// <summary>
/// 得到SqlServer 表相关信息(字段名,类型.....)
/// </summary>
/// <param name="tableName"></param>
/// <returns></returns>
IEnumerable<SqlServerColumnModel> GetSqlServerTableOrViewColumns(string tableName); /// <summary>
/// 得到MySql 表相关信息(字段名,类型.....)
/// </summary>
/// <param name="tableName"></param>
/// <returns></returns>
IEnumerable<MySqlColumnModel> GetMySqlTableOrViewColumns(string tableName); #endregion #region Insert
/// <summary>
/// 添加
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
bool Add(T model); /// <summary>
/// 批量添加
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
bool AddRange(IEnumerable<T> model); /// <summary>
/// 批量添加 生成Sql执行
/// </summary>
/// <param name="model"></param>
/// <param name="clearHistoryData"></param>
void BulkInsertToSql(IEnumerable<T> model, bool clearHistoryData = false); /// <summary>
/// 批量添加 SqlServer
/// 通过 SqlBulkCopy 实现
/// </summary>
/// <param name="model"></param>
/// <param name="clearHistoryData"></param>
void BulkInsertSqlServer(IEnumerable<T> model, bool clearHistoryData = false); /// <summary>
/// 批量添加 MySql
/// 通过 MySqlBulkLoader 实现
/// </summary>
/// <param name="model"></param>
/// <param name="clearHistoryData"></param>
int BulkInsertMySql(IEnumerable<T> model, string csvPath, bool clearHistoryData = false); #endregion #region Delete /// <summary>
/// 按主键删除
/// </summary>
/// <param name="id"></param>
bool DeleteById(dynamic id); /// <summary>
/// 删除
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
bool Delete(T model); /// <summary>
/// 按条件删除
/// </summary>
/// <param name="id"></param>
bool DeleteByWhere(Expression<Func<T, bool>> whereLambda); /// <summary>
/// 批量删除
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
bool DeleteRange(IEnumerable<T> model); /// <summary>
/// 批量删除
/// </summary>
/// <param name="where">条件:{Name="张三",性别="男"}</param>
/// <returns></returns>
bool BulkDelete(object where); /// <summary>
/// 批量删除
/// </summary>
/// <param name="where">条件:{Name="张三",性别="男"}</param>
/// <param name="notWhere">过滤的条件:{Name="张三",年龄="18"}</param>
/// <returns></returns>
bool BulkDelete(object where,object notWhere); #endregion #region Update
/// <summary>
/// 更新
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
bool Update(T model); /// <summary>
/// 批量更新
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
bool UpdateRange(IEnumerable<T> models); /// <summary>
/// 批量更新,不带条件
/// </summary>
/// <param name="set">修改的数据:{Name="张三",年龄=22}</param>
/// <returns></returns>
bool BulkUpdate(object set); /// <summary>
/// 批量更新,带条件
/// </summary>
/// <param name="set">修改的数据:{Name="张三",年龄=22}</param>
/// <param name="where">条件:{Name="张三",性别="男"}</param>
/// <returns></returns>
bool BulkUpdate(object set, object where); #endregion #region Select /// <summary>
/// 按主键查询
/// </summary>
/// <param name="id">主键</param>
/// <returns></returns>
T Find(dynamic id); /// <summary>
/// 通过id查看是否存在
/// </summary>
/// <param name="id">主键</param>
/// <returns></returns>
bool IsExist(dynamic id); /// <summary>
/// 返回序列中的第一个元素
/// </summary>
/// <param name="whereLambda">条件</param>
/// <returns></returns>
T FirstOrDefault(Expression<Func<T, bool>> whereLambda); /// <summary>
/// 获取数据
/// </summary>
/// <typeparam name="TObj">排序类型</typeparam>
/// <param name="whereLambda">条件</param>
/// <param name="orderBy">排序字段</param>
/// <param name="isASC">是否升序</param>
/// <returns></returns>
IEnumerable<T> Find<TObj>(Expression<Func<T, bool>> whereLambda, Expression<Func<T, TObj>> orderBy, bool isASC = true); /// <summary>
/// 获取数据
/// </summary>
/// <typeparam name="TKey">排序类型 1</typeparam>
/// <typeparam name="TObj">排序类型 2</typeparam>
/// <param name="whereLambda">条件</param>
/// <param name="orderBy">排序字段 1</param>
/// <param name="thenBy">排序字段 2</param>
/// <param name="isASC">是否升序</param>
/// <returns></returns>
IEnumerable<T> Find<TKey,TObj>(Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> orderBy, Expression<Func<T, TObj>> thenBy, bool isASC = true); /// <summary>
/// 分页查询 生成SQL执行 SQLSERVER
/// </summary>
/// <param name="name">表名/视图</param>
/// <param name="where">条件 name='Jamel' and age = 18</param>
/// <param name="pageIndex">页码</param>
/// <param name="pageSize">数量</param>
/// <param name="orderBy">排序字段</param>
/// <param name="isASC">是否升序</param>
/// <returns></returns>
IEnumerable<T> PagerToSqlServer(string name, string where, int pageIndex, int pageSize, object orderBy, bool isASC = true); /// <summary>
/// 分页查询 生成SQL执行 MYSQL
/// </summary>
/// <param name="name">表名/视图</param>
/// <param name="where">条件 name='Jamel' and age = 18</param>
/// <param name="pageIndex">页码</param>
/// <param name="pageSize">数量</param>
/// <param name="orderBy">排序字段</param>
/// <param name="isASC">是否升序</param>
/// <returns></returns>
IEnumerable<T> PagerToMySql(string name, string where, int pageIndex, int pageSize, object orderBy, bool isASC = true); /// <summary>
/// 分页查询
/// </summary>
/// <typeparam name="TObj">排序类型</typeparam>
/// <param name="whereLambda">条件</param>
/// <param name="orderBy">排序字段</param>
/// <param name="pageIndex">页码</param>
/// <param name="pageSize">数量</param>
/// <param name="isASC">是否升序</param>
/// <returns></returns>
IEnumerable<T> Pager<TObj>(Expression<Func<T, bool>> whereLambda, Expression<Func<T, TObj>> orderBy, int pageIndex,int pageSize, bool isASC = true); /// <summary>
/// 分页查询
/// </summary>
/// <typeparam name="TKey">排序类型 1</typeparam>
/// <typeparam name="TObj">排序类型 2</typeparam>
/// <param name="whereLambda">条件</param>
/// <param name="orderBy">排序字段 1</param>
/// <param name="thenBy">排序字段 2</param>
/// <param name="pageIndex">页码</param>
/// <param name="pageSize">数量</param>
/// <param name="isASC">是否升序</param>
/// <returns></returns>
IEnumerable<T> Pager<TKey, TObj>(Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> orderBy, Expression<Func<T, TObj>> thenBy, int pageIndex, int pageSize, bool isASC = true); #endregion #region Proc /// <summary>
/// 执行存储过程或自定义sql语句--返回集合(自定义返回类型)
/// SqlServer: exec getActionUrlId @name,@ID
/// MySql: call getActionUrlId(@name,@ID)
/// </summary>
/// <param name="sql">sql语句或存储过程</param>
/// <param name="parms">参数 new SqlParameter("@name","Jamel")</param>
/// <returns></returns>
IEnumerable<T> SqlQuery(string sql, IEnumerable<SqlParameter> parms); /// <summary>
/// 自定义语句和存储过程的增删改--返回影响的行数
/// SqlServer: exec getActionUrlId @name,@ID
/// MySql: call getActionUrlId(@name,@ID)
/// </summary>
/// <param name="sql">sql语句或存储过程</param>
/// <param name="parms">参数 new SqlParameter("@name","Jamel")</param>
/// <returns></returns>
int ExecuteSqlCommand(string sql, IEnumerable<SqlParameter> parms); #endregion }
}

EF 底层封装方法(供参考)的更多相关文章

  1. EF Core 封装方法Expression<Func<TObject, bool>>与Func<TObject, bool>区别

    unc<TObject, bool>是委托(delegate) Expression<Func<TObject, bool>>是表达式 Expression编译后就 ...

  2. EF 底层基础方法

    1 using System; 2 using System.Data; 3 using System.Collections.Generic; 4 using System.Data.Entity; ...

  3. EF封装类 增加版,增加从缓存中查找数据方法,供参考!

    EF封装类 增加版,增加从缓存中查找数据方法,供参考! 这个类是抽象类,我这里增加了需要子类验证的方法ValidateEntity,方便扩展,若想直接使用该类,可以将该类更改成静态类,里面所有的方法都 ...

  4. EF封装类,供参考!

    以下是我对EF DB FIRST 生成的ObjectContext类进行封装,代码如下,供参考学习: using System; using System.Collections.Generic; u ...

  5. Unity上一页下一页切换功能实现源码(仅供参考)

    在做项目时我们有时需要实现切换上一页下一页图片,切换上一首下一首歌曲等等类似的功能.这里写了个简单的实现源码(仅供参考),要是有更好的方法欢迎提出来,共同进步~ 以切换上一页下一页图片为例: usin ...

  6. 【SSM 7】Mybatis底层封装思路

    一.基本概述 在前面的博客中介绍到Mybatis的逆向生成工具,为我们生成了每个实体的基本增删改查的代码,那么每个实体都是那么多的代码,我们很容易的发现,有很大的相似性.对于这部分代码,应该予以抽象封 ...

  7. NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

    以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

  8. 为mutable类型的容器(array,set等)添加kvo,有点麻烦,供参考和了解下吧

    http://blog.csdn.net/caryaliu/article/details/49284185 需要在被观察的属性所在的类里面实现一些方法,对开发者不友好,一般不建议使用,这里mark一 ...

  9. 改善EF代码的方法(下)

    本节,我们将介绍一些改善EF代码的方法,包括编译查询.存储模型视图以及冲突处理等内容. > CompiledQuery 提供对查询的编译和缓存以供重新使用.当相同的查询需要执行很多遍的时候,那么 ...

随机推荐

  1. ArcGIS 网络分析[0] 介绍与博文目录【更新中】

    网络分析是个热点,理论上是属于计算机图形学和数据结构的,GIS以此为基础做出应用. 以下列举本人在学习中遇到的网络分析问题与经验总结. 1. 软件平台及数据准备 平台:Windows 10 操作系统, ...

  2. Windows Server 2016 安装虚拟机版黑群晖

    硬件配置 Dell R730 CPU: Intel(R) Xeon(R) CPU E5-2603 v4 @1.70GHz(6 cores) Ram: 16Gb HDD: 系统-600GB SAS X2 ...

  3. 关于静态注册BroadcastReceiver接收不到广播的问题

    1.背景&解决方法 最近碰到一个需求,app监听特定的广播,接收到广播后启动自己再进行处理.需求很简单,静态注册就好,不过,在自测的时候遇到一个问题,app安装后没启动过的状态下,什么广播都收 ...

  4. 【转载】Sqlserver数据库备份的几种方式

    在实际的数据库Sqlserver的运维的过程中,很多时候我们需要做到数据的备份操作,可以做到定时备份,也可以进行手动数据库备份.在实际的过程中,有时候因业务需要备份出完整数据库,而有时候又因为实际业务 ...

  5. JVM监控命令

    1.概述Jcmd是一个诊断Jvm的命令集工具, 集成了包括Jps, Jstack以及采集JFR信息等功能. 它必须运行在被诊断Jvm进程的同一台机器上.1)查询JVM进程及PID/dapeng-con ...

  6. 超级简单!把文档转换成网页格式(Core)

    因为需要把好多的文档放在服务器上访问,最开始是使用第3方网站www.aconvert.com,这个其实也挺方便的, 最后由于一些需求原因,最终只有依靠代码来进行,以下是简化后的代码 创建一个控制台应用 ...

  7. Oracle ADDM报告生成和性能分析

    我写的SQL调优专栏:https://blog.csdn.net/u014427391/article/category/8679315 对于局部的,比如某个页面列表sql,我们可以使用Oracle的 ...

  8. 基于vue-cli构建vue-router的入门级demo

    前言 本案列仅针对刚刚入门vue学习的伙伴,博主也是刚刚在学基于vue-cli搭建脚手架项目,对于前端大牛,可以移步. 快速搭建vue-cli环境 如何搭建基于vue-cli项目,这里不再叙述,如果不 ...

  9. springboot+jwt做api的token认证

    本篇和大家分享jwt(json web token)的使用,她主要用来生成接口访问的token和验证,其单独结合springboot来开发api接口token验证很是方便,由于jwt的token中存储 ...

  10. mysql的学习笔记(九)

    mysql不支持FULL JOIN时可用UNION ALL代替 SELECT t1.user_id,t2.user_name FROM t1 LIFT JOIN t2 ON t1.user_id = ...