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. vmware克隆Centos6.7虚拟机网卡无法启动问题

    快速处理办法: cat /etc/sysconfig/network-scripts/ifcfg-eth0 sed -i '/UUID/d' /etc/sysconfig/network-script ...

  2. JdbcTemplate的主要用法

    JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句: update方法及batchUpdate方法:update方法用于执行新增.修 ...

  3. CSS 弹性盒子布局

    学习地址:https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Flexible_Box_Layout

  4. java系列--重载和覆盖小结

    继承中属性的隐藏和方法的覆盖      java中规定,子类用于隐藏的变量可以和父类的访问权限不同,如果访问权限被改变,则以子类的权限为准      java中允许子类的变量与父类变量的类型完全不同, ...

  5. 在vhd中安装win7,并建立分差vhd

    准备:硬盘分区激活第一个分区; imagex.exe; install.wim; winpe boot pc 1.cmd命令下,创建主vhd      (1)diskpart       (打开dis ...

  6. GoLang(第一篇 安装)

    golang官网:https://golang.org 中文文档:docscn.studygolang.com/doc/ 一:环境变量设置 导入环境变量GOROOT:export GOROOT=/us ...

  7. 关于IE6、IE7、IE8实现盒子阴影shadow的几个注意点

    通常,我们实现盒阴影都是通过这段代码来实现的 -moz-box-shadow: 3px 3px 4px #000; -webkit-box-shadow: 3px 3px 4px #000; box- ...

  8. zepto.js swipe实现触屏tab菜单

    今天我们来说下zepto.js,有兴趣的朋友可以先进这个网站“http://zeptojs.com/” ,这个可以说是手机里的jquery,但是它取消了hover,加上了swipe及tap这两个触屏功 ...

  9. html代替submit按钮的图片代码

    代替submit按钮的图片代码格式是 <input type="image" name="..." src="..." onClick ...

  10. HTML5 + AJAX ( 原生JavaScript ) 异步多文件上传

    这是在上篇 HTML5 + AJAX ( jQuery版本 ) 文件上传带进度条 的修改版本.后台代码不变就可以接着使用,但是脚本不再使用jQuery了,改为原生的 JavaScript 代码,所以我 ...