ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案。
Entity Framework 利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity),而数据字段都转换为属性 (property),关系则转换为结合属性 (association),让数据库的 E/R 模型完全的转成对象模型。
但是我们在平时的开发中会对多张不同的表做同样的增删改查操作,为了偷懒,我们可以将这些同样的操作进行封装,编写成一个EF的基础类,以后我们开发就可以省去编写重复的代码,只需要直接调用即可。
接下来进入正题,我们先定义接口:
/// <summary>
/// EF基础类接口
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
public interface IEntityFramework<T> where T : class
{
#region 添加
/// <summary>
/// 添加一条数据
/// </summary>
/// <param name="model">添加的对象</param>
/// <returns>影响行数</returns>
int InsertByModel(T model);
/// <summary>
/// 添加多条数据
/// </summary>
/// <param name="modelList">添加的对象的集合</param>
/// <returns>影响行数</returns>
int InsertByList(List<T> modelList);
#endregion
#region 删除
/// <summary>
/// 删除一条数据
/// </summary>
/// <param name="model">删除的对象</param>
/// <returns>影响行数</returns>
int DeleteByModel(T model);
/// <summary>
/// 删除多条记录
/// </summary>
/// <param name="modelList">删除的对象的集合</param>
/// <returns>影响行数</returns>
int DeleteByList(List<T> modelList);
/// <summary>
/// 根据条件删除
/// </summary>
/// <param name="where">条件</param>
/// <returns>影响行数</returns>
int DeleteByWhere(Expression<Func<T, bool>> where);
#endregion
#region 修改
/// <summary>
/// 修改一条数据
/// </summary>
/// <param name="model">修改的对象</param>
/// <param name="propertys">需要修改的属性</param>
/// <returns>影响行数</returns>
int UpdateByModel(T model, params string[] propertys);
/// <summary>
/// 修改多条数据
/// </summary>
/// <param name="modelList">修改的对象的集合</param>
/// <param name="propertys">需要修改的属性</param>
/// <returns>影响行数</returns>
int UpdateByList(List<T> modelList, params string[] propertys);
/// <summary>
/// 根据条件更新
/// </summary>
/// <param name="where">条件</param>
/// <param name="model">修改的对象的集合</param>
/// <param name="propertys">需要修改的属性</param>
/// <returns>影响行数</returns>
int UpdateByWhere(Expression<Func<T, bool>> where, T model, params string[] propertys);
#endregion
#region 查询
/// <summary>
/// 是否存在记录
/// </summary>
/// <param name="where">条件</param>
/// <param name="count">条数</param>
/// <returns>是否存在</returns>
bool Exists(Expression<Func<T, bool>> where, out int count);
/// <summary>
/// 获取前几条数据
/// </summary>
/// <typeparam name="Key">表</typeparam>
/// <param name="where">条件</param>
/// <param name="orderBy">排序的字段</param>
/// <param name="isAsc">true顺序,false倒序</param>
/// <param name="top">前n条</param>
/// <returns></returns>
IQueryable<T> QureyTop<Key>(Expression<Func<T, bool>> where, Expression<Func<T, Key>> orderBy, bool isAsc, int top, out int total);
/// <summary>
/// 获取总条数
/// </summary>
/// <param name="where">条件</param>
/// <returns>总条数</returns>
int Total(Expression<Func<T, bool>> where);
/// <summary>
/// 条件查询带分页
/// </summary>
/// <typeparam name="Key">用于排序的属性</typeparam>
/// <param name="where">条件</param>
/// <param name="orderBy">排序</param>
/// <param name="isAsc">true顺序,false倒序</param>
/// <param name="pageIndex">页数</param>
/// <param name="pageSize">每页条数</param>
/// <param name="total">总数据量</param>
/// <returns></returns>
IQueryable<T> PagingQuery<Key>(Expression<Func<T, bool>> where, Expression<Func<T, Key>> orderBy, bool isAsc, int pageIndex, int pageSize, out int total);
#endregion
}