首页 > 其他 > 详细

1.0数据层的搭建

时间:2017-01-22 12:03:10      阅读:273      评论:0      收藏:0      [点我收藏+]

 

做一个OA系统

项目架构

三层架构+Spring.Net+抽象工厂

1 新建类库MODEL,IDAL,DAL,COMMOND,DALFACTORY,IBLL,BLL和新建MVC项目
这里运用了面向接口编程各个类库项目引用都是对方的接口

数据层创建

2 搭建MODEL层
从最底层的数据层开始建起,数据层的数据来源于MODEL层的数据模型

  • 用EF连接已建好的数据库OA中的Userinfo表

3 搭建IDAL层
搭建DAL层先定义DAL接口层IDAL
将公共的接口定义在IBaseDAL

  • 在IDAL层新建IBaseDAL接口并引用MODEL层
 public interface IBaseDAL<T> where T : class, new()
//增加数据
T AddEntity(T entity);
//删除数据
bool DelteEntity(T entity);
//查询数据
 IQueryable<T>LoadEntities(System.Linq.Expressions.Expression<Func<T,bool>> whereLambda);
 //修改数据
  bool UpdateEntity(T entity);
 /// <summary>
 /// 获取分页
 /// </summary>
 /// <typeparam name="s"></typeparam>
 /// <param name="PageSize">一页页数</param>
 /// <param name="PageIndex">当前页</param>
 /// <param name="totalCount">总数</param>
 /// <param name="whereLambda">筛选条件</param>
 /// <param name="orderbyLambda">排序条件</param>
 /// <param name="isAsc"></param>
 /// <returns></returns>
   IQueryable<T>LoadPageEntities<s>(int PageSize, int PageIndex, out int totalCount, System.Linq.Expressions.Expression<Func<T, bool>> whereLambda, System.Linq.Expressions.Expression<Func<T, s>> orderbyLambda, bool isAsc);

泛型约束:约束T是个类是引用类型而且能被实例化
IQueryable是一个集合,linq表达式lambda表达式就是用IQueryable这种延迟加载机制
接口层应该是用的时候才加载所以用IQueryable
lambda表达式的类型就是 :System.Linq.Expressions.Expression<Func<T, bool>>
定义分页接口包含数据过滤条件,排序的字段,排序的顺序

  • 其它接口继承基接口IBaseDAL

4 搭建数据层DAL

  • 在DAL层新建BaseDAL类

将公共的方法都定义在基类里

  • 引用EF所需要的dll组件,可先建一个ADO数据模型来引入组件,再删掉ADO模型
public  class BaseDAL<T>where T :class,new()
    {
        private OAEntities dbContext = new OAEntities();
        //查询数据
        public IQueryable<T> LoadEntities(Expression<Func<T, bool>> whereLambda)
        {
            return dbContext.Set<T>().Where<T>(whereLambda);
        }
//查询分页
        public IQueryable<T> LoadPageEntities<s>(int PageSize, int PageIndex, out int totalCount, Expression<Func<T, bool>> whereLambda, Expression<Func<T, s>> orderbyLambda, bool isAsc)
        {
            var temp = dbContext.Set<T>().Where<T>(whereLambda);
            totalCount = temp.Count();
            if (isAsc)
            {
                temp = temp.OrderBy<T, s>(orderbyLambda)
                    .Skip<T>((PageIndex - 1) * PageSize)
                    .Take<T>(PageSize);
            }
            else
            {
                temp = temp.OrderByDescending<T, s>(orderbyLambda)
                   .Skip<T>((PageIndex - 1) * PageSize)
                   .Take<T>(PageSize);
            }
            return temp;
        }
        //增加数据
        public T AddEntity(T entity)
        {
            dbContext.Set<T>().Add(entity);
            dbContext.SaveChanges();
            return entity;
        }
        //删除数据
        public bool DelteEntity(T entity)
        {
            dbContext.Entry<T>(entity).State = System.Data.EntityState.Deleted;
            return dbContext.SaveChanges() > 0;
        }
        //修改数据
        public bool UpdateEntity(T entity)
        {
            dbContext.Entry<T>(entity).State = System.Data.EntityState.Modified;
            return dbContext.SaveChanges() > 0;
        }
    }

可以先让基接口继承IBaseDAL接口然后实现接口,就会生成代码,我们只需要改动方法体就可以了,然后把继承的接口删掉写成原本的泛型约束
Set()方法的解释 为指定类返回System.Data.Entity.DbSet,这将允许对上下文中指定的实体进行CURD,也就是说当T等于userInfo传入就可以返回userInfo类型就可以用ef上下文

  • 其他DAL类先继承基类再实现相应接口

举例: public class UserInfoDAL :BaseDAL,IUserInfoDAL
-------------------到这里最底层的数据层就做好了----------------------------------

 

 

 

1.0数据层的搭建

原文:http://www.cnblogs.com/zsycz/p/6339627.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!