昨天面试的时候最后做了一道上机题,竟然跪了,跪就跪在没有搭好框架,连接数据库总是程序报错。
回来之后亲自搭了一下框架,弄好后放到博客上。下图就是搭建好后,整个框架的结构就是这样,下面对框架中的文件进行讲解。
搭建步骤:
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层是另外三个层必须引用的。
时间: 2024-10-17 02:56:45