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>过滤条件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>排序类型</typeparam> /// <param>查询的页码</param> /// <param>每页显示的数目</param> /// <param>符合条件的总行数</param> /// <param>过滤条件Lambda表达式</param> /// <param>排序Lambda表达式</param> /// <param>排序方向</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>待删数据</param> /// <returns>删除结果</returns> public bool DeleteEntity(T entity) { DbEntities.Entry(entity).State = EntityState.Deleted; return true; } /// <summary> /// 编辑数据 /// </summary> /// <param>待编辑数据</param> /// <returns>编辑结果</returns> public bool EditEntity(T entity) { DbEntities.Entry(entity).State = EntityState.Modified; return true; } /// <summary> /// 添加数据 /// </summary> /// <param>待添加数据</param> /// <returns>已添加数据</returns> public T AddEntity(T entity) { entity = DbEntities.Set<T>().Add(entity); //DbEntities.SaveChanges(); return entity; } } }
UserDal继承BaseDal
using PMS.IDAL; using PMS.Model; namespace PMS.DAL { public partial class UserDal : BaseDal<User> { } }
数据访问接口层的构建
然后我们建立相应的IbaseDal接口和IUserDal接口,并且使UserDal类实现IUserDal接口
IBaseDal:
using System; using System.Linq; namespace PMS.IDAL { public interface IBaseDal<T> where T:class,new() { IQueryable<T> LoadEntities(System.Linq.Expressions.Expression<Func<T, bool>> whereLamada); IQueryable<T> LoadPageEntities<s>(int pageIndex, int pageSize, out int totalCount, System.Linq.Expressions.Expression<Func<T, bool>> whereLambda, System.Linq.Expressions.Expression<Func<T, s>> orderbyLambda, bool isAsc); bool DeleteEntity(T entity); bool EditEntity(T entity); T AddEntity(T entity); } }
IUserDal:
using PMS.Model; namespace PMS.IDAL { public partial interface IUserDal:IBaseDal<User> { } }
UserDal实现IUserDal接口:
public partial class UserDal : BaseDal<User>,IUserDal
数据会话层的构建
抽象工厂类AbstractFactory:
using System.Configuration; using System.Reflection; using PMS.IDAL; namespace PMS.DALFactory { public partial class AbstractFactory { //读取保存在配置文件中的程序集名称与命名空间名 private static readonly string AssemblyPath = ConfigurationManager.AppSettings["AssemblyPath"]; private static readonly string NameSpace = ConfigurationManager.AppSettings["NameSpace"]; /// <summary> /// 获取UserDal的实例 /// </summary> /// <returns></returns> public static IUserDal CreateUserInfoDal() { var fullClassName = NameSpace + ".UserInfoDal"; return CreateInstance(fullClassName) as IUserDal; } /// <summary> /// 通过反射获得程序集中某类型的实例 /// </summary> /// <param></param> /// <returns></returns> private static object CreateInstance(string className) { var assembly = Assembly.Load(AssemblyPath); return assembly.CreateInstance(className); } } }
数据会话类DbSession: