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. iOS开发——发短信,邮件

    在IOS开发中,有时候我们会需要用到邮件发送的功能.比如,接收用户反馈和程序崩溃通知等等,这个功能是很常用的.在苹果系统中,如果彼此的手机都是iOS设备,并且开通了iMessage功能,那么彼此之间的 ...

  2. GoEasy消息推送

    1. 从GoEasy获取appkey appkey是验证用户的有效性的唯一标识. 注册账号. GoEasy官网:https://goeasy.io 用注册好的账号登录到GoEasy的后台管理系统,创建 ...

  3. iOS技术框架构和更新版本的技术特性

    Core OS层 Sytem 系统层包括内核环境,驱动及操作系统层unix接口.内核以mach为基础,它 负责操作系统的各个方面,包括管理系统的虚拟内存,线程,文件系统,网络以及进程间通讯.这一层包含 ...

  4. osgEarth基础入门(转载)

    osgEarth基础入门 osgEarth是基于三维引擎osg开发的三维数字地球引擎库,在osg基础上实现了瓦片调度插件,可选的四叉树调度插件,更多的地理数据加载插件(包括GDAL,ogr,WMS,T ...

  5. java设计模式面试

    设计模式 1. 单例模式:饱汉.饿汉.以及饿汉中的延迟加载,双重检查 2. 工厂模式.装饰者模式.观察者模式. 3. 工厂方法模式的优点(低耦合.高内聚,开放封闭原则) 单例模式 分类:懒汉式单例.饿 ...

  6. eclipse使用egit提交代码报错

    在eclipse上使用插件egit同步代码时出现如下错误 解决办法: 开eclipse中的windows-->Preferences-->Team-->Git-->Config ...

  7. 如何解决PHP+MySQL出现乱码的现象

    在使用PHP+MYSQL时,您是否遇到过字符乱码的问题呢?您是如何解决这个问题的呢?这里提供了一种解决之道. 在mysql_connect后面加一句SET NAMES UTF8,即可使得UTF8的数据 ...

  8. Angular - - $location 和 $window

    $location $location服务解析浏览器地址中的url(基于window.location)并且使url在应用程序中可用.将地址栏中的网址的变化反映到$location服务和$locati ...

  9. PHP中file_exists与is_file、is_dir的区别,以及执行效率的比较

    判断文件是否存在,有2个常用的PHP函数:is_file 和 file_exists, 判断文件夹是否存在,有2个常用PHP函数:is_dir 和 file_exists, 即 file_exists ...

  10. redhat6 + 11G DG部署

    在主库中netca配置 [oracle@HE3dbs]$ cat /u01/app/oracle/product/11gr2/db_1/network/admin/listener.ora #list ...