昨天面試的時候最后做了一道上機題,竟然跪了,跪就跪在沒有搭好框架,連接數據庫總是程序報錯。
回來之后親自搭了一下框架,弄好后放到博客上。下圖就是搭建好后,整個框架的結構就是這樣,下面對框架中的文件進行講解。
搭建步驟:
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層是另外三個層必須引用的。