首页 > 代码库 > 搭建三层架构(ASP.NET MVC+EF)

搭建三层架构(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层是另外三个层必须引用的。

 

搭建三层架构(ASP.NET MVC+EF)