在上篇博文中,小編主要簡單的介紹了一下EF的一些基礎知識,其中,小編蜻蜓點水的提了一下ModelFirst和DBFirst,ModelFirst先設計實體,然後根據模型生成資料庫,DBFirst根據資料庫生成模型,兩個方向都是可以了,兩個方向可以互相更新,比如新添加了實體,可以根據模型生成資料庫,如果在資料庫裡面新添加了字段,我們可以從資料庫更新模型。在介紹ModelFirst和DBFirst之前,我們先來解決兩個問題,EF與linq
to sql的關系以及為什麼使用linq to sql和EF。
EF與linq to sql的關系
linq to sql 是微軟ORM思想的一個具體化,EF也是它的一個具體化,那麼,這兩個産品有什麼差別呢?Linq to Sql是ORM思想實作的一個輕量級的架構,EF是一個重量級架構;Linq to Sql和EF的一個重要的差別就是,Linq to Sql隻能針對于SQL Server資料庫,而EF可以針對于很多的資料庫(Oracle,SQL Server等),也就是說EF是跨資料庫的,不要小看這一點,在實際的開發中,非常的實用,舉個簡單的小例子,還記我們敲的VB.NET版本的機房收費系統麼,其中涉及到了資料通路層,如果出于某種原因,我們換了資料庫,那麼,我們就需要重新編寫資料通路層,如果我們在創機房收費系統這個項目的時候,使用了linq
to sql,更換了資料庫linq to sql架構就需要重新進行大量的改動,如果使用了EF架構,那麼我們隻需要改動其中的配置檔案就可以了,不需要修改程式中的代碼。
為什麼使用linq to sql和EF
這個問題,也關乎我們的D層,還記得敲機房收費系統的時候,我們會抽出來一個sqlhelper類,這個類實作了對資料庫的增删改查,然後,我們的再建立相應的D層類,這些類方法的功能,其實都差不多,唯一不同的就是sql,從這裡我們可以看到,我們的D層的問題,那就是,我們重複性的書寫一些不必要的類或者方法,解決這個方法就需要慢慢的抽象,抽象出共有的東西,像:DataTable裝換為實體集,操作資料庫的幾類方法(注意其參數),然後将其一整合,這個大緻就是我們所屬的ORM思想實作的雛形了,當然,上面所說的那些東西,Linq
to Sql或EF這些架構已經幫助我們實作了,我們隻需要使用它們提供的方法就行了,從這裡我們也可以看到,如果我們使用這些架構,我們程式員在程式設計的時候,幾乎不需要管理D層的東西,隻需要關注業務的實作就可以了。
接下來,小編就來簡單的介紹一下ModelFirst,ModelFirst先設計實體,然後根據模型生成資料庫,如下圖所示,

我們可以再圖中空白處右擊添加實體,還可以新增标量屬性,以及添加關聯。接着,我們可以根據上面的實體生成資料庫,如下圖所示:
生成的代碼如下所示:
接着我們來看一個具體的例子,ModelFirst關聯實體的插入操作代碼如下所示:
接着,我們來看一下DBFirst,根據資料庫生成模型,我們具體來看下面一段代碼:
ModelFirst和DBFirst兩種方式,都可以達到我們想要的效果,實作同樣的目的,兩個方法可以互相更新,最後小編簡單的來介紹一下延遲加載,延遲加載也可以叫做按需加載,可以分兩方面來了解,一方面指暫時不需要該資料,不用在目前馬上加載,而可以推遲到使用它時再加載;另一方面指不确定是否将會需要該資料,是以暫時請不要加載,待确定需要後再加載它。延遲加載是一種很重要的資料通路特性,可以有效地減少與資料源的互動(注意,這裡所提的互動不是指互動次數,而是指互動的資料量),進而提升程式性能。在EF中有兩種延遲加載,具體代碼如下所示:
小編寄語:該博文,小編主要介紹了一些EF的基礎知識,分别從三個大方面對EF進行詳細介紹,第一個方面:EF與linq to sql的關系以及為什麼要使用EF與linq to sql,第二方面,介紹了一下ModelFirst和DBFirst,最後介紹了一下延遲加載,對于EF的相關知識,小編剛剛接觸,了解的還是很淺,有不同意見的小夥伴可以一起讨論交流哦,常常想,如果不是因為緣分,如果不是因為接受了項目什麼mvc、EF、linq等,小編也沒有這麼快就開始接觸,在接項目的過程中學習,再把學習到的知識運用到項目中,趕腳棒棒哒,檔案管理項目,未完待續......