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. 《算法导论》Problem 2-4 Inversions

    在Merge Sort的基础上改改就好了. public class Inversions { public static int inversions(int [] A,int p, int r) ...

  2. 《javascript语言精粹》——第3章对象

    第三章:对象: 属性名字:可以是包括空字符串在内的任意字符串: 属性值:是除undefined值之外的任何值; [1].对象字面量: var obj={}; //空对象 var obj = new O ...

  3. Java学习(一)

    各种原因就开始java开发快一个月了.一直也没有正式记录一下...现在开始..O(∩_∩)O~.... 先小结一下学习以来遇到的几个问题: 1.myeclipse的常用快捷键: F2当鼠标放在一个标记 ...

  4. Oracle的一些命令

    sqlldr: 一般用于导入以任何后缀结束的文件,我这次就是因为要导入一张以.20160101为后缀的文件,当初简直束手无策 结合input.ctl使用,可以在DOS下使用,可以对一张表导入数十万,百 ...

  5. Python3基础 add() 向集合中加入新的元素

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  6. HNU 13073 Ternarian Weights 解题报告

    本题大意: 用天平对一物品进行称重,现有重量不同的砝码,砝码的重量分别为:1,3,9,27,..,3^n.(n<20) 天平的右侧放砝码,左侧放物品或物品和砝码,使得左右两边的重量相等. 现有一 ...

  7. violin 结构介绍

    参考:http://www.iqiyi.com/w_19rt9yvv9p.html 主要结构有:琴身.指板.腮托.琴马.琴弦.琴轴

  8. Android组件生命周期(二)

    引言 应用程序组件有一个生命周期——一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生 ...

  9. 连锁不平衡LD

    http://wenku.baidu.com/link?url=Fr_C7J5F4KusZTpZJUfuVfh4Bpyb9BAY7IQhWAOYirQJW0Oz-X3fI5r41aPHiQR8ENn9 ...

  10. 修改GitHub上项目语言显示的问题

    问题 最近将自己写的博客放到github上了.由于使用了富文本编辑器.jQuery.Bootstrap等第三方插件,导致js.css等代码远远超过你自己写的代码. 于是也就成这样了 而且这里也显示Ja ...