MVC项目结构搭建及单个类的实现学习笔记1

2019-05-22 08:50:41王旭

注:这里的增删改操作并不即时进行,而是在封装在数据会话层中,以实现工作单元模式,提高数据库的操作效率。

考虑到每个类都需要实现相同的数据操作,我们可以将以上方法封装到一个泛型基类中,各类型只需要继承泛型基类就可以实现以上方法:

BaseDal.cs

using System;
using System.Data.Entity;
using System.Linq;

namespace PMS.DAL
{
  public class BaseDal<T> where T:class ,new()
  {
    public DbContext DbEntities = DbContextFactory.CreateContext();

    /// <summary>
    /// 查询过滤
    /// </summary>
    /// <param name="whereLamada">过滤条件Lambda表达式</param>
    /// <returns>实体集合</returns>
    public IQueryable<T> LoadEntities(System.Linq.Expressions.Expression<Func<T, bool>> whereLamada)
    {
      return DbEntities.Set<T>().Where(whereLamada);
    }

    /// <summary>
    /// 分页查询
    /// </summary>
    /// <typeparam name="TS">排序类型</typeparam>
    /// <param name="pageIndex">查询的页码</param>
    /// <param name="pageSize">每页显示的数目</param>
    /// <param name="totalCount">符合条件的总行数</param>
    /// <param name="whereLambda">过滤条件Lambda表达式</param>
    /// <param name="orderbyLambda">排序Lambda表达式</param>
    /// <param name="isAsc">排序方向</param>
    /// <returns>实体集合</returns>
    public IQueryable<T> LoadPageEntities<TS>(int pageIndex, int pageSize, out int totalCount, System.Linq.Expressions.Expression<Func<T, bool>> whereLambda, System.Linq.Expressions.Expression<Func<T, TS>> orderbyLambda, bool isAsc)
    {
      var temp = DbEntities.Set<T>().Where(whereLambda);
      totalCount = temp.Count();
      temp = isAsc ? temp.OrderBy(orderbyLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize) : temp.OrderByDescending(orderbyLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize);
      return temp;
    }

    /// <summary>
    /// 删除数据
    /// </summary>
    /// <param name="entity">待删数据</param>
    /// <returns>删除结果</returns>
    public bool DeleteEntity(T entity)
    {
      DbEntities.Entry(entity).State = EntityState.Deleted;
      return true;
    }

    /// <summary>
    /// 编辑数据
    /// </summary>
    /// <param name="entity">待编辑数据</param>
    /// <returns>编辑结果</returns>
    public bool EditEntity(T entity)
    {
      DbEntities.Entry(entity).State = EntityState.Modified;
      return true;
    }

    /// <summary>
    /// 添加数据
    /// </summary>
    /// <param name="entity">待添加数据</param>
    /// <returns>已添加数据</returns>
    public T AddEntity(T entity)
    {
      entity = DbEntities.Set<T>().Add(entity);
      //DbEntities.SaveChanges();
      return entity;
    }
  }
}