亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

EF結合三層:三層中數據層父類和業務層父類的使用

2019-11-17 01:25:20
字體:
來源:轉載
供稿:網友

EF結合三層:三層中數據層父類和業務層父類的使用

今天我們主要討論下數據層父類和業務層父類的使用。眾所周知,數據層無非就是實現增刪改查的方法。無論是哪個實體類,無非就是為了實現增刪改查方法,所有我們在三層的DAL層封裝了一個BaseDAL類,來做增刪改查。在BLL層封裝了一個BaseBLL類,來做增刪改查。如果在Model層,通過ModelFirst的方式,又添加了新的實體(YYY),那么在DAL層只需要定義一個類YYYDAL,并讓YYYDAL繼承自BaseDAL即可。同理,在BLL層,只需要定義一個類YYYBLL,并讓其繼承自BaseBLL即可。下面我們來完成這個描述。

由于該文章的側重點數據層父類和業務層父類的使用。所以我們就不再領著大家搭建三層結構。默認大家已經創建好的程序的架構。

并且在edmx模型中我們已經創建了兩個實體。這里我們使用Customer和Ticket(由于最近在講解影院售票系統)

步驟一:先在DAL層創建一個CustomerDAL類,并且書寫對應的增刪改查以及分頁的方法。

 1 public class CustomerDAL 2     { 3        //數據庫上下文對象 4        YYMMVCEntities db = new YYMMVCEntities(); 5        /// <summary> 6        /// 新增操作 7        /// </summary> 8        public int Add(Customer customer) 9        {10            db.Customers.AddObject(customer);11            //保存成功后會將自增的ID設置成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        //根據條件刪除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        //分頁查詢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    }

第二步:書寫BaseDAL類

然后我們在DAL層新建一個BaseDAL類,類中內容是通過CustomerDAL修改而來的,將出現Customer的地方替換成了T,出現Customers的地方改成了CreateObjectSet<T>()

,修正后的類如下

 1 public class BaseDAL<T> where T:class,new() 2     { 3         //數據庫上下文對象 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             //保存成功后會將自增的ID設置成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         //根據條件刪除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         //分頁查詢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類型必須有無參的構造。

到這里我們已經完成了對DAL層父類的書寫。

第三步:書寫BaseBLL類

接下來,我們就可以書寫BaseBLL類了,當然,抽取BaseBLL類的方式和抽取BaseDAL的方式基本一致,在這里就直接寫出BaseBLL的類的代碼結構了。

 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         //根據條件刪除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         //分頁查詢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     }

其實,我們發現一個問題,就先現在我們的BLL層就是起到了一個數據隔離的作用。

然后我們就可以在對應的DAL層和BLL層創建對應的子類來繼承自各自的父類。接下來我們通過ModelFirst的方式修改edmx模型,在其中添加一個新的實體Book,并且建立Customer和Book之間的關系(1對多)。如下圖:

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

在頁面的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             }

就可以驗證子類對象是否成功繼承父類的方法。

好的,我們今天的探討到此結束!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久好看免费视频| 亚洲v日韩v综合v精品v| 久久久天堂国产精品女人| 91久久精品日日躁夜夜躁国产| 亚洲欧美国产另类| 中文.日本.精品| 成人网页在线免费观看| 久热精品视频在线免费观看| 欧美成人免费小视频| 亚洲人成绝费网站色www| 久久国产精品久久久久久久久久| 日韩欧美国产网站| 午夜免费在线观看精品视频| 成人网在线观看| 亚洲一区二区三区毛片| 91久久久亚洲精品| 久久香蕉频线观| 少妇高潮久久久久久潘金莲| 国产91在线视频| 亚洲成**性毛茸茸| 色综合久久久888| 国产主播精品在线| 欧美成人亚洲成人日韩成人| 亚洲欧美制服另类日韩| 亚洲欧美另类中文字幕| 成人网欧美在线视频| 日韩有码视频在线| 91精品视频网站| 中国china体内裑精亚洲片| 国产日韩欧美91| 亚洲石原莉奈一区二区在线观看| 91av在线视频观看| 中文字幕视频在线免费欧美日韩综合在线看| 日韩在线激情视频| 国外视频精品毛片| 91嫩草在线视频| 国产精品日韩一区| 亚洲欧美日韩在线高清直播| 欧美高清视频在线播放| 日韩一级裸体免费视频| 欧美一区二区三区免费视| 久久中文精品视频| 日韩在线激情视频| 国产欧美日韩免费看aⅴ视频| 精品日本美女福利在线观看| 亚洲激情中文字幕| 91高清在线免费观看| 亚洲自拍中文字幕| 青草热久免费精品视频| 亚洲xxxxx| 国产999精品| 日韩精品在线观| 韩日精品中文字幕| 成人免费网站在线观看| 亚洲va欧美va国产综合剧情| 日韩欧美在线视频| 亚洲图片欧美日产| 久久亚洲综合国产精品99麻豆精品福利| 欧美亚洲国产视频小说| 色妞在线综合亚洲欧美| 国产+人+亚洲| 91久久夜色精品国产网站| 久久久久久久国产精品| 伊人久久久久久久久久久| 中文字幕亚洲欧美| 欧美视频第一页| 欧美xxxx综合视频| 亚洲精品国产精品国产自| 国产精品成人观看视频国产奇米| 亚洲精品wwww| 久久精品亚洲一区| 久久精品福利视频| 日韩在线一区二区三区免费视频| 777午夜精品福利在线观看| 亚洲自拍偷拍色片视频| 91久久久在线| 欧美体内谢she精2性欧美| 日韩视频在线观看免费| 久99九色视频在线观看| 91精品国产自产在线老师啪| 欧美大片va欧美在线播放| 九九热精品视频国产| 久久精品成人欧美大片| 九九精品在线视频| 国产精品对白刺激| 国产亚洲美女精品久久久| 亚洲精品女av网站| 国产成人鲁鲁免费视频a| 91国产高清在线| 亚洲第一页在线| 欧美午夜片在线免费观看| 国产精品精品一区二区三区午夜版| 麻豆一区二区在线观看| 成人a在线视频| 亚洲视频在线观看| 亚洲国产精品一区二区久| 在线观看免费高清视频97| 国产视频观看一区| 亚洲va男人天堂| 精品久久久香蕉免费精品视频| 精品久久久999| 国产精品大陆在线观看| 欧美日韩精品中文字幕| 国产精品88a∨| 久久久91精品国产一区不卡| 色综合亚洲精品激情狠狠| 亚洲精品久久久久中文字幕欢迎你| 国产91九色视频| 国产日韩在线一区| 欧美日韩精品在线视频| 亚洲人成网站777色婷婷| 亚洲一区www| 欧美性受xxxx黑人猛交| 日韩av男人的天堂| 97视频人免费观看| 久久久精品日本| 国产精品爽爽爽爽爽爽在线观看| 欧美激情亚洲精品| 红桃视频成人在线观看| 91热福利电影| 日韩av在线影院| 亚洲大胆人体在线| 海角国产乱辈乱精品视频| 中文字幕精品视频| 成人免费大片黄在线播放| 国产69精品99久久久久久宅男| 久久久精品中文字幕| 98精品国产自产在线观看| 国产成人精品久久二区二区91| 欧美日韩美女视频| 亚洲经典中文字幕| 国产精品美女www爽爽爽视频| 亚洲欧美在线一区| 欧美日韩亚洲91| 亚洲精品自在久久| 欧美电影免费在线观看| 欧美做爰性生交视频| 在线日韩日本国产亚洲| 欧日韩不卡在线视频| 亚洲欧美精品suv| 国产精品第七十二页| 亚洲第一国产精品| 欧美成人免费在线视频| 岛国精品视频在线播放| 最新亚洲国产精品| 日本精品一区二区三区在线| 久久久久久久色| 成人妇女免费播放久久久| 久久国产精品久久久久久久久久| 国产精品r级在线| 日韩av影视综合网| 一区二区三区精品99久久| 国产精品久久久久久久久久尿| 精品久久久久久中文字幕大豆网| 最好看的2019的中文字幕视频| 国外色69视频在线观看| 久久久久久com| 国产不卡精品视男人的天堂| 九九久久国产精品| 欧美日韩第一视频| 亚洲精品97久久| 欧美精品国产精品日韩精品| 国产精品入口夜色视频大尺度| 91免费视频网站|