国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

EF結(jié)合三層:三層中數(shù)據(jù)層父類和業(yè)務(wù)層父類的使用

2019-11-17 01:25:20
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

EF結(jié)合三層:三層中數(shù)據(jù)層父類和業(yè)務(wù)層父類的使用

今天我們主要討論下數(shù)據(jù)層父類和業(yè)務(wù)層父類的使用。眾所周知,數(shù)據(jù)層無(wú)非就是實(shí)現(xiàn)增刪改查的方法。無(wú)論是哪個(gè)實(shí)體類,無(wú)非就是為了實(shí)現(xiàn)增刪改查方法,所有我們?cè)谌龑拥腄AL層封裝了一個(gè)BaseDAL類,來(lái)做增刪改查。在BLL層封裝了一個(gè)BaseBLL類,來(lái)做增刪改查。如果在Model層,通過(guò)ModelFirst的方式,又添加了新的實(shí)體(YYY),那么在DAL層只需要定義一個(gè)類YYYDAL,并讓YYYDAL繼承自BaseDAL即可。同理,在BLL層,只需要定義一個(gè)類YYYBLL,并讓其繼承自BaseBLL即可。下面我們來(lái)完成這個(gè)描述。

由于該文章的側(cè)重點(diǎn)數(shù)據(jù)層父類和業(yè)務(wù)層父類的使用。所以我們就不再領(lǐng)著大家搭建三層結(jié)構(gòu)。默認(rèn)大家已經(jīng)創(chuàng)建好的程序的架構(gòu)。

并且在edmx模型中我們已經(jīng)創(chuàng)建了兩個(gè)實(shí)體。這里我們使用Customer和Ticket(由于最近在講解影院售票系統(tǒng))

步驟一:先在DAL層創(chuàng)建一個(gè)CustomerDAL類,并且書寫對(duì)應(yīng)的增刪改查以及分頁(yè)的方法。

 1 public class CustomerDAL 2     { 3        //數(shù)據(jù)庫(kù)上下文對(duì)象 4        YYMMVCEntities db = new YYMMVCEntities(); 5        /// <summary> 6        /// 新增操作 7        /// </summary> 8        public int Add(Customer customer) 9        {10            db.Customers.AddObject(customer);11            //保存成功后會(huì)將自增的ID設(shè)置成customer的主鍵屬性12           return db.SaveChanges();13        }       14        //刪除15        public int DeleteBy(int cid)16        {17            Customer customer=new Customer(){CID = cid};18            db.Customers.Attach(customer);19            db.Customers.DeleteObject(customer);20            return db.SaveChanges();21        }22        //根據(jù)條件刪除23        public int DeleteExPRession(System.Linq.Expressions.Expression<Func<Customer,bool>> deleWhere)24        {25            List<Customer> customers=db.Customers.Where(deleWhere).ToList();26           customers.ForEach(m=>db.Customers.DeleteObject(m));27            return db.SaveChanges();28        }29 30        //修改方法31        public  int Modify(Customer customer)32        {33            db.Attach(customer);34            db.ObjectStateManager.ChangeObjectState(customer, EntityState.Modified);35            return db.SaveChanges();36        }37        //查詢38        publicList<Customer> GetListBy(System.Linq.Expressions.Expression<Func<Customer,bool>> seleWhere)39        {40            return db.Customers.Where(seleWhere).ToList();41        }42        //查詢和排序43        public List<Customer> GetListBy<Tkey>(System.Linq.Expressions.Expression<Func<Customer,bool>> seleWhere,System.Linq.Expressions.Expression<Func<Customer,Tkey>> orderWhere)44        {45            return db.Customers.Where(seleWhere).OrderBy(orderWhere).ToList();46        }47        //分頁(yè)查詢48        public List<Customer> GetListPaged(int pageIndex,int pageSize,System.Linq.Expressions.Expression<Func<Customer,bool>> orderbyWhere)49        {50            return db.Customers.OrderBy(orderbyWhere).Skip((pageIndex - 1)*pageSize).Take(pageSize).ToList();51        } 52    }

第二步:書寫B(tài)aseDAL類

然后我們?cè)贒AL層新建一個(gè)BaseDAL類,類中內(nèi)容是通過(guò)CustomerDAL修改而來(lái)的,將出現(xiàn)Customer的地方替換成了T,出現(xiàn)Customers的地方改成了CreateObjectSet<T>()

,修正后的類如下

 1 public class BaseDAL<T> where T:class,new() 2     { 3         //數(shù)據(jù)庫(kù)上下文對(duì)象 4         YYMMVCEntities db = new YYMMVCEntities(); 5         /// <summary> 6         /// 新增操作 7         /// </summary> 8         public int Add(T customer) 9         {10             //必須限定T的類型,只能為引用類型11             db.CreateObjectSet<T>().AddObject(customer);12             //保存成功后會(huì)將自增的ID設(shè)置成customer的主鍵屬性13             return db.SaveChanges();14         }15 16         //刪除17         public int DeleteBy(T model)18         {19             20             db.CreateObjectSet<T>().Attach(model);21             db.CreateObjectSet<T>().DeleteObject(model);22             return db.SaveChanges();23         }24         //根據(jù)條件刪除25         public int DeleteExpression(System.Linq.Expressions.Expression<Func<T, bool>> deleWhere)26         {27             List<T> customers = db.CreateObjectSet<T>().Where(deleWhere).ToList();28             customers.ForEach(m => db.CreateObjectSet<T>().DeleteObject(m));29             return db.SaveChanges();30         }31 32         //修改方法33         public int Modify(T customer)34         {35             db.CreateObjectSet<T>().Attach(customer);36             db.ObjectStateManager.ChangeObjectState(customer, EntityState.Modified);37             return db.SaveChanges();38         }39 40         //查詢41         public List<T> GetListBy(System.Linq.Expressions.Expression<Func<T, bool>> seleWhere)42         {43             return db.CreateObjectSet<T>().Where(seleWhere).ToList();44         }45         //查詢和排序46         public List<T> GetListBy<Tkey>(System.Linq.Expressions.Expression<Func<T, bool>> seleWhere, System.Linq.Expressions.Expression<Func<T, Tkey>> orderWhere)47         {48             return db.CreateObjectSet<T>().Where(seleWhere).OrderBy(orderWhere).ToList();49         }50         //分頁(yè)查詢51         public List<T> GetListPaged(int pageIndex, int pageSize, System.Linq.Expressions.Expression<Func<T, bool>> orderbyWhere)52         {53             return db.CreateObjectSet<T>().OrderBy(orderbyWhere).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();54 55         } 56    }

其中publicclassBaseDAL<T>whereT:class,new()中whereT:class代表T的類型只能是引用類型,new()代表T類型必須有無(wú)參的構(gòu)造。

到這里我們已經(jīng)完成了對(duì)DAL層父類的書寫。

第三步:書寫B(tài)aseBLL類

接下來(lái),我們就可以書寫B(tài)aseBLL類了,當(dāng)然,抽取BaseBLL類的方式和抽取BaseDAL的方式基本一致,在這里就直接寫出BaseBLL的類的代碼結(jié)構(gòu)了。

 1 public class BaseBLL<T> where T:class,new () 2     { 3        protected  BaseDAL<T> dal = new BaseDAL<T>(); 4         /// <summary> 5         /// 新增操作 6         /// </summary> 7         public int Add(T customer) 8         { 9             return dal.Add(customer);10         }11 12         //刪除13         public int DeleteBy(T cid)14         {15             return dal.DeleteBy(cid);16         }17         //根據(jù)條件刪除18         public int DeleteExpression(System.Linq.Expressions.Expression<Func<T, bool>> deleWhere)19         {20             return dal.DeleteExpression(deleWhere);21         }22 23         //修改方法24         public int Modify(T customer)25         {26             return dal.Modify(customer);27         }28 29         //查詢30         public List<T> GetListBy(System.Linq.Expressions.Expression<Func<T, bool>> seleWhere)31         {32             return dal.GetListBy(seleWhere);33         }34         //查詢和排序35         public List<T> GetListBy<Tkey>(System.Linq.Expressions.Expression<Func<T, bool>> seleWhere, System.Linq.Expressions.Expression<Func<T, Tkey>> orderWhere)36         {37             return dal.GetListBy(seleWhere, orderWhere);38         }39         //分頁(yè)查詢40         public List<T> GetListPaged(int pageIndex, int pageSize, System.Linq.Expressions.Expression<Func<T, bool>> orderbyWhere)41         {42             return dal.GetListPaged(pageIndex, pageSize, orderbyWhere);43 44         } 45     }

其實(shí),我們發(fā)現(xiàn)一個(gè)問(wèn)題,就先現(xiàn)在我們的BLL層就是起到了一個(gè)數(shù)據(jù)隔離的作用。

然后我們就可以在對(duì)應(yīng)的DAL層和BLL層創(chuàng)建對(duì)應(yīng)的子類來(lái)繼承自各自的父類。接下來(lái)我們通過(guò)ModelFirst的方式修改edmx模型,在其中添加一個(gè)新的實(shí)體Book,并且建立Customer和Book之間的關(guān)系(1對(duì)多)。如下圖:

步驟四:在DAL層添加BookDAL類,并且繼承自BaseDAL;在BLL層添加BookBLL類,并且繼承自BaseBLL類。

在頁(yè)面的Load事件中書寫如下代碼:

1      if (!IsPostBack)2             {3                 BookBLL bll=new BookBLL();4                 List<Book> list=bll.GetListBy(m => m.ID > 0);5                 Repeater1.DataSource = list;6                 Repeater1.DataBind();7             }

就可以驗(yàn)證子類對(duì)象是否成功繼承父類的方法。

好的,我們今天的探討到此結(jié)束!


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 石河子市| 元谋县| 永仁县| 临西县| 原平市| 巨野县| 盘锦市| 疏勒县| 修水县| 荔波县| 三河市| 石棉县| 南宫市| 巴塘县| 宝坻区| 错那县| 区。| 忻城县| 永兴县| 德州市| 太和县| 故城县| 新化县| 虎林市| 延安市| 开江县| 乡宁县| 丹东市| 东莞市| 乌苏市| 阜平县| 辉南县| 邓州市| 冷水江市| 光泽县| 绩溪县| 调兵山市| 南溪县| 荔波县| 崇州市| 改则县|