三、三层架构搭建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_36792339/article/details/82798170

一、搭建方式
两个项目用公共操作数据类

方式一:
1、建立空项目解决方案,并添加Web文件加和三层架构类(扩展Enum枚举类、Common通用公共类、SqlHelp数据库辅助类)
2、 Web 里面新建两个项目
3、三层架构Model 从动软找实体类 ,DAL用泛型,BLL 用Model和DAL
注意点:Model 则是一个表对应一个类文件
DAL和BLL 只需要一个 BLL 传参实体类 DAL用泛型接口接受并处理。

			 (三层的搭建项目和数据库操作选择(EF、Dapper、Dos.ORM))
			 因为三层自己搭建的 所以数据库处理可以SQL方式或者Dos.ROM框架来处理数据库

方式二:
1、在解决方案下创建两个MVC
2、 创建一个SqlHelp 类库
3、用现有的轮子EF创建操作数据库

			 (三层的搭建项目和数据库操作选择(EF))

注意:EF必须存在类库里面,不可以存在文件夹下,所以第二步很重要。

警告:EF 还可以封装 泛型

泛型:
DAL 层的处理

using Dos.ORM;
using LawOA.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LawOA.DAL
{
    public class DAL<T>  //1、从BLL 获取的userinfo 实体类
    {
        public static readonly DbSession Context = new DbSession("connString");

        public List<T> FnSelect()  //2、返回数据以userinfo实体类的数据结构返回 
        {
            List<T> list = Context.FromSql("SELECT TOP 5 * FROM userinfo")
                .ToList<T>();     
            return list;
        }
    }
}

BLL

using LawOA.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LawOA.BLL
{
    public class BLL<T>   //1、new 实例化的时候 这个T 赋值了userinfo实体类类型  全局使用
    {
        DAL.DAL<T> dal = new DAL.DAL<T>();  //2、再将这个T的实体类类型结构赋值给即将实例化的DAL类
        public List<T> FnSelect()         // 3、这个List<T> 即将返回 T类型格式的数据
        {
           return  dal.FnSelect();        // 4、这个DAL里的dal 方法默认的类型 就是userinfo 类型  
        }
    }
}

控制器

            Model.userinfo userinfo = new Model.userinfo();     //一、实例化实体类 //二、实例化 BLL 类,BLL这个方法是泛型,BLL在调用DAL操作数据库的也是泛型 可以实现么   答案:可以 
            BLL.BLL<Model.userinfo> bll = new BLL.BLL<Model.userinfo>();   // 1、泛型类的时候  指定该类的userinfo实体类作为该类类型 ( 该类T为全局的实体类型)
            List<Model.userinfo>  result=  bll.FnSelect();  //2、 并指定执行返回userinfo实体类结构的泛型变量
            return Json(result);

上面 有泛型 再写sql 就没有多大意义了

这是Dos.ORM关于数据库的操作

using Dos.ORM;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Wenshu.DAL
{
    public class Areas
    {
        #region 新增一条信息
        /// <summary>
        /// 增加一条数据
        /// </summary>
        /// <param name="model">实体类</param>
        /// <returns></returns>
        public int Add(Model.Areas model)
        {
            int id = Base.DB.SqlServer.Insert<Model.Areas>(model);
            return id;
        }
        #endregion

        #region 更新一条数据
        /// <summary>
        /// 更新一条数据
        /// </summary>
        public int Update(Model.Areas model)
        {
            Dictionary<Field, object> dic = new Dictionary<Field, object>();
            dic.Add(Model.Areas._.AreaName, model.AreaName);
            dic.Add(Model.Areas._.Field, model.Field);
            dic.Add(Model.Areas._.Pid, model.Pid);
            dic.Add(Model.Areas._.IsNext, model.IsNext);
            int count = Base.DB.SqlServer.Update<Model.Areas>(dic, Model.Areas._.AreaId == model.AreaId);
            return count;
        }
        #endregion

        #region 删除一条数据
        /// <summary>
        /// 删除一条数据
        /// </summary>
        public int Delete(int AreaId)
        {
            int count = Base.DB.SqlServer.Delete<Model.Areas>(Model.Areas._.AreaId == AreaId);
            return count;
        }
        #endregion

        #region 得到一个对象实体
        /// <summary>
        /// 得到一个对象实体 数据
        /// </summary>
        /// <param name="perTypeId"></param>
        /// <returns></returns>
        public Model.Areas GetModel(string AreaId)
        {
            return Base.DB.SqlServer.From<Model.Areas>().Where(Model.Areas  ._.AreaId == AreaId).ToFirst();
        }
        #endregion

        #region 根据条件获取信息

        /// <summary>
        /// 根据条件获取信息(数据)
        /// </summary>
        /// <param name="wc">where条件</param>
        /// <returns></returns>
        public List<Model.Areas> GetByWhere(WhereClip wc)
        {

            return Base.DB.SqlServer.From<Model.Areas>().Where(wc).OrderBy(Model.Areas._.AreaId.Desc).ToList();
        }


        /// <summary>
        /// 根据条件获取信息(数据)
        /// </summary>
        /// <param name="wc">where条件</param>
        /// <param name="pageIndex">页码</param>
        /// <param name="pageSize">每页显示数量</param>
        /// <returns></returns>
        public List<Model.Areas> GetByWhere(WhereClip wc, int pageIndex, int pageSize)
        {

            return Base.DB.SqlServer.From<Model.Areas>().Where(wc).Page(pageSize, pageIndex).OrderBy(Model.Areas._.AreaId.Desc).ToList();
        }


        /// <summary>
        /// 根据条件获取信息(数据)数量
        /// </summary>
        /// <param name="wc">where条件</param>
        /// <returns></returns>
        public int GetByWhereCount(WhereClip wc)
        {
            return Base.DB.SqlServer.From<Model.Areas>().Where(wc).Count();
        }
        #endregion


        #region 获取顶级区域
        public List<Model.Areas> GetAll()
        {
            return Base.DB.SqlServer.From<Model.Areas>().SetCacheTimeOut(3600).ToList();
        }
        #endregion

        #region 获取顶级区域
        public List<Model.Areas> GetByPid(string pid)
        {
            return Base.DB.SqlServer.From<Model.Areas>().Where(Model.Areas._.Pid == pid).SetCacheTimeOut(3600).ToList();
        }


        public List<Model.Areas> GetByPidLinkIn(string pid)
        {
            return Base.DB.SqlServer.From<Model.Areas>().Where(Model.Areas._.Pid == pid).ToList();
        }
        #endregion


        public string GetAreaId(string areaName)
        {
            try
            {
                object id = Base.DB.SqlServer.From<Model.Areas>().Where(Model.Areas._.AreaName == areaName).Select(Model.Areas._.AreaId).ToScalar();
                if (id == null)
                {
                    return "0";
                }
                else
                {
                    return id.ToString();
                }
            }
            catch
            {
                return "0";
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_36792339/article/details/82798170