【.Net碼農】【MVC】多層架構+MVC+EF+AUTOFAC+AUTOMAPPER
阿新 • • 發佈:2019-02-09
1 namespace YTJWGL_EFDao
2 {
3 public class BaseEFDao<T> : IBaseDao<T> where T : class,new()//限制T的型別為class或者物件
4 {
5
6
7 #region 查詢普通實現方案(基於Lambda表示式的Where查詢)
8 /// <summary>
9 /// 獲取所有Entity
10 /// </summary>
11 /// <param name="exp"> Lambda條件的where</param>
12 /// <returns>返回IEnumerable型別</returns>
13 public virtual IEnumerable<T> GetEntities(Func<T, bool> exp)
14 {
15 using (Entities db = new Entities())
16 {
17 return db.Set<T>().Where(exp).ToList();
18 }
19
20
21 }
22 /// <summary>
23 /// 計算總個數(分頁)
24 /// </summary>
25 /// <param name="exp">Lambda條件的where</param>
26 /// <returns></returns>
27 public virtual int GetEntitiesCount(Func<T, bool> exp)
28 {
29 using (Entities db = new Entities())
30 {
31 return db.Set<T>().Where(exp).ToList().Count();
32
33 }
34 }
35 /// <summary>
36 /// 分頁查詢(Linq分頁方式)
37 /// </summary>
38 /// <param name="pageNumber">當前頁</param>
39 /// <param name="pageSize">頁碼</param>
40 /// <param name="orderName">lambda排序名稱</param>
41 /// <param name="sortOrder">排序(升序or降序)</param>
42 /// <param name="exp">lambda查詢條件where</param>
43 /// <returns></returns>
44 public virtual IEnumerable<T> GetEntitiesForPaging(int pageNumber, int pageSize, Func<T, string> orderName, string sortOrder, Func<T, bool> exp)
45 {
46 using (Entities db = new Entities())
47 {
48 if (sortOrder == "asc") //升序排列
49 {
50 return db.Set<T>().Where(exp).OrderBy(orderName).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();
51 }
52 else
53 {
54 return db.Set<T>().Where(exp).OrderByDescending(orderName).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();
55 }
56 }
57
58 }
59 /// <summary>
60 /// 根據條件查詢滿足條件的一個entites
61 /// </summary>
62 /// <param name="exp">lambda查詢條件where</param>
63 /// <returns></returns>
64 public virtual T GetEntity(Func<T, bool> exp)
65 {
66 using (Entities db = new Entities())
67 {
68 return db.Set<T>().Where(exp).SingleOrDefault();
69 }
70 }
71 #endregion
72
73 #region 增改刪實現
74 /// <summary>
75 /// 插入Entity
76 /// </summary>
77 /// <param name="model"></param>
78 /// <returns></returns>
79 public virtual bool Insert(T entity)
80 {
81 using (Entities db = new Entities())
82 {
83 var obj = db.Set<T>();
84 obj.Add(entity);
85 return db.SaveChanges() > 0;
86
87 }
88
89 }
90 /// <summary>
91 /// 更新Entity(注意這裡使用的傻瓜式更新,可能效能略低)
92 /// </summary>
93 /// <param name="model"></param>
94 /// <returns></returns>
95 public virtual bool Update(T entity)
96 {
97 using (Entities db = new Entities())
98 {
99 var obj = db.Set<T>();
100 obj.Attach(entity);
101 db.Entry(entity).State = System.Data.EntityState.Modified;
102 return db.SaveChanges() > 0;
103 }
104
105
106 }
107 /// <summary>
108 /// 刪除Entity
109 /// </summary>
110 /// <param name="entity"></param>
111 /// <returns></returns>
112 public virtual bool Delete(T entity)
113 {
114 using (Entities db = new Entities())
115 {
116 var obj = db.Set<T>();
117 if (entity != null)
118 {
119 obj.Attach(entity);
120 db.Entry(entity).State = System.Data.EntityState.Deleted;
121 obj.Remove(entity);
122 return db.SaveChanges() > 0;
123 }
124 return false;
125 }
126
127 }
128 #endregion
129 }
130 }