看了一堆視頻教程后,感覺基本了解的差不多了,可以動手.....因為最好的學習方法就是實踐嘛....
所以打算從網站做起,在WebForm和MVC之間選了MVC,因為感覺高大上...也比較靈活
於是買了兩本書《ASP.NET MVC 4高級編程(第4版)》和《ASP.NET MVC 4 Web編程》,在群里有群友問,為什么要買兩本...其實這是習慣啦...對於初學者來說,最先要了解的就是,這個東西大概是個什么東西....書的作者不同,介紹的側重點也不同,買兩本就為了互補一下...
mvc也大概看了一下,至少基本的控制器,試圖啊,還有整個的流程都了解的差不多,准備動手了....
先說說在選擇數據庫訪問技術上遇到的問題.....
看的教程,基本上數據庫都是用EF來做的...於是也跟着用了微軟官方出品高大上的Entity Framework....
Codefirst神馬的太遙遠,於是先打開sqlserver建庫,然后寫model...然后興高采烈的就開始了...
然后不出意外的就遇到問題了
1.在深入理解完全面向對象的數據庫設計方法之前,思路還是局限在sql時代(畢竟寫了很多年的sql語句),這就直接導致了數據庫表和Model設計的不合理
於是就有了下面的Model (省略了部分無關字段)
菜單ID,父菜單ID,菜單名字,父菜單名字......
使用的時候根據ParentCode獲取到父菜單的MenuName 填充到 ParentName
public class Menu { [Key] public int MenuCode{ get; set; } public int ParentCode { get; set; } public string MenuName { get; set; } [NotMapped] public string ParentName { get; set; }
於是就有了這段 自連接(自己Join自己) 查詢代碼....
var query = from a in DB.Menus join b in DB.Menus on a.ParentCode equals b.MenuCode into lg from b in lg.DefaultIfEmpty() select new SDOU.Models.Staff.Menu { MenuCode =a.MenuCode , MenuName =a.MenuName, ParentCode =a.ParentCode , ParentName = b == null ? "" : b.MenuName };
啪嚓一運行,問題又來了....
我的Model明明是放在 Models.Staff.Menu ,運行的時候 EF非要給我整到DAL的命名空間下,然后告訴我無法關聯實體還是什么的....總之就是自動給我把命名空間給換了.....
對於新手的我,在百度谷歌搗鼓半天也沒解決問題...
后台求助大神,大神曰,你這一看就知道有問題,不是EF的問題,而是你自己的思路問題....這是在拿着EF寫SQL.......(其實我想說,那當然了,我只會sql嘛).....然后大神又說,初學者如果沒有面向對象的設計思想,就老老實實回去用sql吧....
既然大神的指點了,我也不去糾結到底是哪里的問題了,就算把這個命名空間問題搞定,以后用EF肯定還會遇到更多問題....這種自己連接自己的簡單查詢都搞不定,以后那些橫跨多個表的復雜查詢就更不用說了....
於是乎各方求助,百度谷歌一番知道了幾個輕量級的微型ORM框架... PetaPoco,Dapper,FluentData,DataRabbit這幾個推薦的比較多,有時候沒有選擇還好,拿來就用了,但有選擇的時候反而會更加難下決定....
於是乎,就有了這個博問 http://q.cnblogs.com/q/65659/ 讓大神們幫我做個選擇....
最后的結果就是棄用EF,啟用Dapper