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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM