請注明轉載地址:http://www.cnblogs.com/arhat
哈哈!老魏回來了,4月份的內容開始更新了,由於3月份時間都在做項目,沒有時間寫了,那么4月份老魏會盡可能的多寫點東西的。那么4月份的內容主要是EF和Linq了。至於NHibernate沒有更新完,后面有時間的話老魏會更新的。
一、EF簡介
EF的全稱是Entity Framework,是微軟推出的一款ORM框架,和Nhibernate的作用是一樣的,但是出自微軟之手那么肯定在兼容性上要非常的到家。雖然EF是個遲來的產品,但是他的特性非常的好,比起NHibernate簡直是簡化太多了,比如我們不用在寫那些映射文件了。好了,廢話一堆了,開始介紹一下怎么使用EF吧。
至於EF的知識,老魏在后面將會補上,因為老魏不是很新歡edmx文件把映射文件,實體文件都放在一起,這樣不利於分層的設計的。
今天主要把老魏分離EF的心得寫出來,否則后面就要忘了!(汗,人老了!)
二、EF分離環境的搭建
這里呢,老魏使用的是MySql數據庫,至於為什么不用SQL Server呢,主要是老魏的本本傷不起啊!所以老魏在學習EF的時候走了很多彎路啊!
首先我們建立一個”Com.ArHat.EF”的解決方案,同時在解決方案中建立4個項目:
1,Com.ArHat.DAL(類庫)
2,Com.ArHat.BLL(類庫)
3,Com.ArHat.Model(類庫)
4,Com.ArHat.Test(控制台應用程序)
並添加他們之間的相互引用(小孩子都會了)。
然后,我們需要在Com.ArHat.Model添加一個edmx文件,也就是“ADO.NET 實體數據模型”。
當我們添加完畢edmx文件后,更改一下edmx的屬性,把“代碼生成策略”改為”無”。因為我們要使用T4模板來分離edmx生成的文件,利於我們的分層,所以這里非常的重要。
然后我們在edmx的設計界面右鍵點擊,選擇“添加代碼生成項”。
然后選擇“POCO Generator With Validations”這個微軟提供的T4模板。最后在Model項目中生成了2個T4文件和對應的.cs文件
但是此時,我們會發生成的代碼是有問題的,因為在Model項目中並沒有引用“System.ComponentModel.DataAnnotations”的dll文件,所以加入這個文件,同時把生成的實體類中的 [MaxLength(50)]這個Attribute去掉,否則是錯誤的哦。
接下的步驟就是復制粘貼了,我們把生成的School.Context.tt文件復制到DAL項目中,當然肯定要更改命名空間了!
當我們把School.Context.tt復制到DAL項目中的時候,回發現School.Context.cs文件變成一個空文件了,不要擔心,因為School.Context.tt找不到edmx文件了,此時我們打開這個文件並更改edmx的路徑。如下所示:
string inputFile = @"..\\Com.ArHat.Model\\School.edmx";
然后我們保存tt文件,會發現此時的School.Context.cs文件又有內容了。但是編譯的時候確實錯的。
原因是我們在DAL中沒有引用System.Data.Entity.dll文件。添加一下引用就可以了。此時就基本上大功告成了,我們在BLL中寫一個類用來測試一下我們的勞動成功吧!
首先還要在BLL項目中添加”System.Data.Entity.dll”的引用。建立一個B_Student.cs文件,內容如下:
public class B_Studnet { private DAL.SchoolEntities context = new DAL.SchoolEntities(); public List<Model.student> GetAllStudent() { var query = from stu in context.student orderby stu.sid select stu; return query.ToList<Model.student>(); } }
然后我們在Com.ArHat.Test主項目中測試一下,代碼如下:
class Program { static void Main(string[] args) { BLL.B_Studnet studentBLL = new BLL.B_Studnet(); foreach (Model.student stu in studentBLL.GetAllStudent()) { Console.WriteLine(stu.sname); } } }
運行一下看看效果:
哦,不。怎么可能報錯呢.這是為什么呢?其實問題就出在程序運行的時候是查找的主項目中的App.config文件,而我們的鏈接字符串是在Model項目中生成的,所以在程序運行的時候,是無法找到的,解決方法就是把Model中的App.config文件復制到主項目中就可以了。然后我們在來測試一下。
激動人心的時候終於到來了,成功了,我們成功了!呵呵。其實這也沒什么的。通過上面的步驟,我們知道如何把edmx文件分成兩個部分了,一個是實體類,一個是DbContext了。這樣就達到了我們分層的目的了。
好了,今天就到這里吧!