zoukankan      html  css  js  c++  java
  • 搭建三层架构(ASP.NET MVC+EF)

    昨天面试的时候最后做了一道上机题,竟然跪了,跪就跪在没有搭好框架,连接数据库总是程序报错。

    回来之后亲自搭了一下框架,弄好后放到博客上。下图就是搭建好后,整个框架的结构就是这样,下面对框架中的文件进行讲解。

    搭建步骤:

    1.数据库建好后,由数据库生成实体模型。

    2.添加BLL、DAL层两个类库。

    3.在DAL层先建工厂EFContextFactory.cs,下面是创建上下文对象的方法。

    namespace DAL
    {
        class EFContextFactory
        {
            #region 从线程的数据槽中获得上下文对象
            /// <summary>
            /// 从线程的数据槽中获得上下文对象
            /// </summary>
            /// <returns></returns>
            public static DbContext GetDbContextFromContext()
            {
                DbContext context = CallContext.GetData("Dbcontext") as mssjEntities;
                if (context == null)
                {
                    context = new mssjEntities();
                    CallContext.SetData("Dbcontext", context);
                }
                return context;
            }
            #endregion
        }
    }
    

      4.之后是创建BaseDAL.cs,BaseDAL中先获取EF上下文实体,然后再通过实体写公用的方法。

    namespace DAL
    {
       public class BaseDAL<T> where T:class,new()
        {
           //下面是两种写法获取EF上下文对象,
           private DbContext db = EFContextFactory.GetDbContextFromContext();
           protected DbContext DataContext
           {
               get { return EFContextFactory.GetDbContextFromContext(); }
           }
    
    
           /// <summary>
           /// 根据查询条件获取单个实体
           /// </summary>
           /// <param name="condition"></param>
           /// <returns></returns>
           public T GetModel(Expression<Func<T, bool>> condition)
           {
               return DataContext.Set<T>().Where(condition).FirstOrDefault();
           }
        }
    }

    5.建立文件UserDAL.cs,这个是数据表映射实体所对应的DAL文件。

    namespace DAL
    {
        /// <summary>
        /// UserDAL继承BaseDAL
        /// </summary>
       public class UserDAL:BaseDAL<User>
        {
           /// <summary>
           /// 在这里声明实例化一个UserDAL的对象
           /// </summary>
           public static readonly UserDAL GetUserDAL = new UserDAL();
           private UserDAL() { }
        }
    }

    6.接下来在BLL层先建一个BaseBLL。

    namespace BLL
    {
      public abstract  class BaseBLL<T> where T:class,new()
        {
          /// <summary>
          /// 构造方法中,创建仓储。
          /// </summary>
          public BaseBLL()
          {
              SetCurrentRepository();
          }
          /// <summary>
          /// CurrentRepository属性在BaseBLL的子类中用到
          /// </summary>
          protected BaseDAL<T> CurrentRepository
          {
              get;
              set;
          }
          //设置成抽象方法,子类继承时,应该重写抽象方法。
          public abstract void SetCurrentRepository();
    
    
          /// <summary>
          /// 根据查询条件获取单个实体
          /// </summary>
          /// <param name="condition"></param>
          /// <returns></returns>
          public T GetModel(Expression<Func<T, bool>> condition)
          {
              return CurrentRepository.GetModel(condition);
          }
    
        }
    }

    7.创建UserBLL.cs继承BaseBLL.cs。

    namespace BLL
    {
       public class UserBLL:BaseBLL<User>
        {
           /// <summary>
            /// 在这里声明实例化一个UserBLL的对象
           /// </summary>
           public static readonly UserBLL GetUserBLL = new UserBLL();
           /// <summary>
           /// 要对BaseBLL中的抽象方法进行实现。
           /// </summary>
           public override void SetCurrentRepository()
           {
               CurrentRepository = UserDAL.GetUserDAL;//CurrentRepository属性在BaseBLL中定义
           }
        }
    }

    8.至此,BLL、DAL层搭建完毕,接下来把数据库的链接字符串复制到Web.config中,之后启动网站。打断点进行监视,便发现数据库已经链接成功,这样一个简单的框架就算搭好了。

    注意:1.Web层,DAL层需要引用EntityFramework的dll。因为EntityFramework有版本问题,所以都去引用Model层中bin文件夹下的dll。

             2.Model层是另外三个层必须引用的。

    休对故人思故国 且将新火试新茶 诗酒趁年华
  • 相关阅读:
    laydate指定日期不可选
    kindeditor上传及播放视频的问题
    【Mood】八上期末考
    关于Java注解(annotation)的简单理解
    关于RabbitMQ的简单理解
    关于MongoDB的简单理解(三)--Spring Boot篇
    关于MongoDB的简单理解(二)--Java篇
    关于linux系统密码策略的设置(转载)
    mysq 报错, sql语句在数据库里运行正常, 在内网测试正常,打包放外网的时候就报下面错误
    java mybatisplus+springboot服务器跨域问题
  • 原文地址:https://www.cnblogs.com/sdadx/p/5890665.html
Copyright © 2011-2022 走看看