EF的操作类网上很多类,我只是把我在平时项目中的类进行一些改进和扩展,扩展了部分同步和异步的EF操作

接口

 /// <summary>
/// 接口数据操作基础类
/// </summary>
/// <typeparam name="Key"></typeparam>
/// <typeparam name="Entity"></typeparam>
public interface IBaseOpertion<TEntity, TKey> where TEntity : class
{
/// <summary>
/// 添加数据
/// </summary>
/// <param name="tableName"></param>
/// <param name="table"></param>
/// <returns></returns>
int AddTable(string tableName, DataTable table);
Task<int> AddTableAsy(string tableName, DataTable table);
/// <summary>
/// 添加
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
TEntity AddEntity(TEntity entity);
Task<TEntity> AddEntityAsy(TEntity entity);
/// <summary>
/// 批量添加
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
int AddEntity(List<TEntity> list);
Task<int> AddEntityAys(List<TEntity> list);
/// <summary>
/// 修改
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
TEntity UpdateEntity(TEntity entity);
Task<TEntity> UpdateEntityAsy(TEntity entity);
/// <summary>
/// 删除 实体
/// </summary>
/// <param name="TEntity"></param>
/// <returns></returns>
int DelEntity(TEntity entity);
Task<int> DelEntityAsy(TEntity entity);
// <summary>
/// 删除 主键
/// </summary>
/// <param name="TEntity"></param>
/// <returns></returns>
int DelEntity(TKey key);
Task<int> DelEntityAsy(TKey key);
// <summary>
/// 删除 条件
/// </summary>
/// <param name="TEntity"></param>
/// <returns></returns>
int DelEntity(Dictionary<string,object> where);
Task<int> DelEntityAsy(Dictionary<string, object> where); /// <summary>
/// 根据ID进行查询
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
TEntity GetEntityByID(TKey key);
Task<TEntity> GetEntityByIDAsy(TKey key);
/// <summary>
/// 根据sql进行查询
/// </summary>
/// <param name="predicate"></param>
/// <returns></returns>
List<TEntity> GetEntityQuerySql(string sql);
Task<List<TEntity>> GetEntityQuerySqlAsy(string sql);
/// <summary>
/// 根据条件进行查询
/// </summary>
/// <param name="fun"></param>
/// <returns></returns>
List<TEntity> GetEntityLisrByWhere(Expression<Func<TEntity, bool>> fun);
Task<List<TEntity>> GetEntityLisrByWhereAsy(Expression<Func<TEntity, bool>> fun); /// <summary>
/// 根据条件进行查询
/// </summary>
/// <param name="fun"></param>
/// <returns></returns>
TEntity GetEntityByWhere(Expression<Func<TEntity, bool>> fun);
Task<TEntity> GetEntityByWhereAsy(Expression<Func<TEntity, bool>> fun);
}

实现类

 /// <summary>
/// 数据实体操作
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <typeparam name="TKey"></typeparam>
public abstract class BaseService<TEntity, TKey> : IBaseOpertion<TEntity, TKey> where TEntity : class
{
public virtual TEntity AddEntity(TEntity entity)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
TEntity newEntity = dbHelper.Set<TEntity>().Add(entity);
if (dbHelper.SaveChanges() > )
return newEntity;
return null;
}
}
public virtual async Task<TEntity> AddEntityAsy(TEntity entity) {
using (DBContextHelper dbHelper = new DBContextHelper())
{
TEntity newEntity = dbHelper.Set<TEntity>().Add(entity);
int temp =await dbHelper.SaveChangesAsync();
if (temp > )
return newEntity;
return null;
}
} public virtual TEntity UpdateEntity(TEntity entity)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
DbSet<TEntity> dbSet = dbHelper.Set<TEntity>();
DbEntityEntry<TEntity> entry = dbHelper.Entry<TEntity>(entity);
if (entry.State == System.Data.Entity.EntityState.Detached)
{
dbSet.Attach(entity);
entry.State = System.Data.Entity.EntityState.Modified;
}
if (dbHelper.SaveChanges() >= )
return entity;
return null;
}
}
public virtual async Task<TEntity> UpdateEntityAsy(TEntity entity)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
DbSet<TEntity> dbSet = dbHelper.Set<TEntity>();
DbEntityEntry<TEntity> entry = dbHelper.Entry<TEntity>(entity);
if (entry.State == System.Data.Entity.EntityState.Detached)
{
dbSet.Attach(entity);
entry.State = System.Data.Entity.EntityState.Modified;
}
int result = await dbHelper.SaveChangesAsync();
if (result >= )
return entity;
return null;
}
} public virtual int DelEntity(TEntity entity)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
dbHelper.Set<TEntity>().Remove(entity);
return dbHelper.SaveChanges();
}
}
public virtual async Task<int> DelEntityAsy(TEntity entity)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
dbHelper.Set<TEntity>().Remove(entity);
return await dbHelper.SaveChangesAsync();
}
} public virtual TEntity GetEntityByID(TKey key)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
var entity = dbHelper.Set<TEntity>().Find(key);
return entity;
}
}
public virtual async Task<TEntity> GetEntityByIDAsy(TKey key)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
return await dbHelper.Set<TEntity>().FindAsync(key);
}
} public virtual List<TEntity> GetEntityQuerySql(string sql)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
var entity = dbHelper.Set<TEntity>().SqlQuery(sql, new object[] { }).ToList();
return entity;
}
}
public virtual async Task<List<TEntity>> GetEntityQuerySqlAsy(string sql)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
return await dbHelper.Set<TEntity>().SqlQuery(sql, new object[] { }).ToListAsync();
}
} public virtual List<TEntity> GetEntityLisrByWhere(Expression<Func<TEntity, bool>> fun)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
var entity = dbHelper.Set<TEntity>().AsNoTracking().Where(fun).ToList();
return entity;
}
}
public virtual async Task<List<TEntity>> GetEntityLisrByWhereAsy(Expression<Func<TEntity, bool>> fun)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
return await dbHelper.Set<TEntity>().AsNoTracking().Where(fun).ToListAsync();
}
} public virtual int AddEntity(List<TEntity> list)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
dbHelper.Configuration.AutoDetectChangesEnabled = false;
try
{
dbHelper.Set<TEntity>().AddRange(list);
return dbHelper.SaveChanges();
}
finally
{
dbHelper.Configuration.AutoDetectChangesEnabled = true;
}
}
}
public virtual async Task<int> AddEntityAys(List<TEntity> list)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
dbHelper.Configuration.AutoDetectChangesEnabled = false;
try
{
dbHelper.Set<TEntity>().AddRange(list);
return await dbHelper.SaveChangesAsync();
}
finally
{
dbHelper.Configuration.AutoDetectChangesEnabled = true;
}
}
} public virtual int DelEntity(TKey key)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
var entity = dbHelper.Set<TEntity>().Find(key);
dbHelper.Set<TEntity>().Remove(entity);
return dbHelper.SaveChanges();
}
}
public virtual async Task<int> DelEntityAsy(TKey key)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
var entity = dbHelper.Set<TEntity>().Find(key);
dbHelper.Set<TEntity>().Remove(entity);
return await dbHelper.SaveChangesAsync(); ;
}
} public virtual int DelEntity(Dictionary<string, object> where)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
if (where == null || where.Keys.Count <= ) return ;
StringBuilder sb = new StringBuilder();
List<string> KeyList = new List<string>(where.Keys);
List<SqlParameter> plist = new List<SqlParameter>();
for (int i = , j = KeyList.Count; i < j; i++)
{
plist.Add(new SqlParameter()
{
ParameterName = KeyList[i],
Value = where[KeyList[i]]
});
if (i == j - )
{
sb.Append(string.Format(" {0}=@{0} ", KeyList[i]));
}
sb.Append(string.Format("{0}=@{0} and ", KeyList[i]));
}
string TableName = this.GetType().Name;
string sql = string.Format("delete from [{0}] where {1}", TableName, sb.ToString());
dbHelper.Set<TEntity>().SqlQuery(sql, plist);
return dbHelper.SaveChanges();
}
}
public virtual async Task<int> DelEntityAsy(Dictionary<string, object> where)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
if (where == null || where.Keys.Count <= ) return ;
StringBuilder sb = new StringBuilder();
List<string> KeyList = new List<string>(where.Keys);
List<SqlParameter> plist = new List<SqlParameter>();
for (int i = , j = KeyList.Count; i < j; i++)
{
plist.Add(new SqlParameter()
{
ParameterName = KeyList[i],
Value = where[KeyList[i]]
});
if (i == j - )
{
sb.Append(string.Format(" {0}=@{0} ", KeyList[i]));
}
sb.Append(string.Format("{0}=@{0} and ", KeyList[i]));
}
string TableName = this.GetType().Name;
string sql = string.Format("delete from [{0}] where {1}", TableName, sb.ToString());
dbHelper.Set<TEntity>().SqlQuery(sql, plist);
return await dbHelper.SaveChangesAsync();
}
} public virtual TEntity GetEntityByWhere(Expression<Func<TEntity, bool>> fun)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
var entity = dbHelper.Set<TEntity>().AsNoTracking().Where(fun).FirstOrDefault();
return entity;
}
}
public virtual async Task<TEntity> GetEntityByWhereAsy(Expression<Func<TEntity, bool>> fun)
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
return await dbHelper.Set<TEntity>().AsNoTracking().Where(fun).FirstOrDefaultAsync();
}
} public virtual int AddTable(string tableName, DataTable table)
{
if (string.IsNullOrEmpty(tableName) || table==null || table.Rows.Count<)
return -;
else
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
try
{
if (dbHelper.Database.Connection.State != ConnectionState.Open)
{
var bulkCopy = new SqlBulkCopy((SqlConnection)dbHelper.Database.Connection);
bulkCopy.DestinationTableName = tableName;
bulkCopy.WriteToServer(table);
}
return table.Rows.Count;
}
catch (Exception e)
{
throw e;
}
finally {
if (dbHelper.Database.Connection.State != ConnectionState.Closed)
{
dbHelper.Database.Connection.Close();
}
}
}
}
}
public virtual async Task<int> AddTableAsy(string tableName, DataTable table)
{
if (string.IsNullOrEmpty(tableName) || table == null || table.Rows.Count < )
return -;
else
{
using (DBContextHelper dbHelper = new DBContextHelper())
{
try
{
if (dbHelper.Database.Connection.State != ConnectionState.Open)
{
var bulkCopy = new SqlBulkCopy((SqlConnection)dbHelper.Database.Connection);
bulkCopy.DestinationTableName = tableName;
await bulkCopy.WriteToServerAsync(table);
}
return table.Rows.Count;
}
catch (Exception e)
{
throw e;
}
finally
{
if (dbHelper.Database.Connection.State != ConnectionState.Closed)
{
dbHelper.Database.Connection.Close();
}
}
}
}
}
}

EF操作扩展之async的更多相关文章

  1. EF操作MySql

    EF的CodeFrist操作MySql的提前准备: 1.安装两个包:MySql.Data和MySql.Data.Entity,在VS中程序包管理器中添加2个包.(备注需要的VS2015,并且EF6支持 ...

  2. ASP.net如何保证EF操作类线程内唯一

    说到线程内唯一,肯定会想到单例模式,但是如果多用户访问网站就会出现问题.ASP.net中有两种方法可以保证EF操作类线程内唯一(目前只会这两种,以后有好的方法再添加): 1.httpcontext(实 ...

  3. EF操作数据库的步骤和一些简单操作语句

    这里是写给我自己做记录的,不会写成一篇很好的博客,也不会置顶,如果有朋友看到了,而且觉得里面的内容不咋的,希望见谅哈! 关于这部分内容,这里推荐一篇总结的非常好的博客,如果你点击进来了,那么请略过下面 ...

  4. EF操作与Linq写法记录

    项目总结:EF操作与Linq写法记录 1.EF引入 新建一个MVC项目之后,要引用EF框架,可以按照以下步骤进行: 1),在Models中添加项目 2),选择Entity Data Model,并重新 ...

  5. 学习PHP中好玩的Gmagick图像操作扩展的使用

    在 PHP 的图像处理领域,要说最出名的 GD 库为什么好,那就是因为它不需要额外安装的别的什么图像处理工具,而且是随 PHP 源码一起发布的,只需要在安装 PHP 的时候添加上编译参数就可以了. G ...

  6. .NetCore 使用 Linq 动态拼接Expression表达式条件来实现 对EF、EF Core 扩展查询排序操作

    相信在使用EF的时候对查询条件或者排序上的处理令人心烦,下面我们就来动态拼接表达式解决这一问题 当我们在查询中使用Where的时候可以看到如下参数 下面我们就来扩展 Expression<Fun ...

  7. 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)

    前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...

  8. EF架构~扩展一个分页处理大数据的方法

    回到目录 最近总遇到大数据的问题,一次性处理几千万数据不实际,所以,我们需要对大数据进行分块处理,或者叫分页处理,我在EF架构里曾经写过类似的,那是在进行BulkInsert时,对大数据批量插入时候用 ...

  9. EntityFramework.Extended 对EF进行扩展

    前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...

随机推荐

  1. webstorm安装express报错

    .... Exit code: -1 解决方法: webstorm创建express 需要 预先安装express-generator npm install express-generator -g

  2. Session监听事件的处理

    设置Session监听  在web.xml文件中: <listener> <listener-class>cjq.login.listener.UpdateLogOutTime ...

  3. 关于Apache,Mysql,PHP之间的关系

    声明:以下为作者原创,转载请注明文章来源地址. 通过百度百科我们知道 Apache(全称Apache HTTP Server):是世界使用排名第一的Web服务器软件.可以在大多数计算机操作系统中运行, ...

  4. 【Xilinx-Petalinux学习】-06-OpenCV通过USB摄像头采集图像。

    占位, 实现USB摄像头的图像采集与保存

  5. UVa 10400 - Game Show Math

    题目大意:给出n(n<100)个正整数和一个目标数,按照给出数的顺序,运用+.-.*./四则运算(不考虑优先级),判断能否得出所要的结果. 首先考虑的就是暴力枚举,不过时间复杂度为O(4n),会 ...

  6. Ubuntu安装飞鸽传输

    飞鸽传书下载地址 http://www.ipmsg.org.cn/ipmsg/download.html 下载以后解压压缩包,会有一个可执行文件,executable文件. ./Qipmsg 如果没报 ...

  7. 为什么32位操作系统最大支持4GB内存

    因为32位操作系统的地址空间为32位,地址总数为2^32,每个地址对应1Byte内存空间,这样,32位操作系统管理的最大内存空间限制为2^32Byte=4*1024*1024*1024Byte,即4G ...

  8. spring整合mybatis,springMVC的0配置文件方式

    0配置文件的形式主要是采用spring3.0提供的@configuration注解和spring容器在启动的时候会加载实现了WebApplicationInitializer的类,并调用其onStar ...

  9. 正确的 Composer 扩展包安装方法

    问题说明 我们经常要往现有的项目中添加扩展包,有时候因为文档的错误引导,如下图来自 这个文档 的: composer update 这个命令在我们现在的逻辑中,可能会对项目造成巨大伤害. 因为 com ...

  10. PHPcms 把盛大登陆换成人人网登陆

    首先要确保你的 phpcms是比较新的版本, v9.3以后的吧 这里说明一个函数 rawurlencode() 本函数将字符串编码成 URL 的字符串专用格式,特殊的字符会转换成百分比符号后面加上二个 ...