標籤:
項目伊始,建立資料庫互動層代碼是底層架構的首要任務。常用的做法包括手動編碼、Hibernate或者動軟之類的代碼產生器,而多數人忽略了.Net環境下VS提供的兩套非常好用的資料層工具。
EF和Linq2Sql兩套架構。 實際上他們相比其他方式絕對是最快,最方便的。 對使用者而言,無論EF還是Linq2Sql,他們都預設將項目配置了正確的資料庫連接,大幅減少在代碼中的工作量。
EF是Entity Framework 的縮寫,目前應該是到了第7個版本(貌似在Beta版本)。
Microsoft has given the following definition of Entity Framework:
The Microsoft ADO.NET Entity Framework is an Object/Relational Mapping (ORM) framework that enables developers to work with relational data as domain-specific objects, eliminating the need for most of the data access plumbing code that developers usually need to write.
實際上,按照微軟給出的定義,EF的目的在於簡化開發人員工作量,推出了這套架構。是EF的工作流程樣本。
實際上,EF支援從資料表建立實體類,從實體類產生資料表以及從資料庫設計(DB Model)自動建立實體類和資料表。
如此可以直接大幅降低花費在資料庫設計、建表和寫實體類的工作。畢竟那是碼農們乾的事情,程式員怎麼可以這麼浪費時間呢。
目前為止,EF6應該是最新的。接下來從 table -> Domain Class的模式出發,簡單介紹EF的使用。
VS裡自己整合了EF,建立EF的資料層的步驟是:為解決方案添加資料庫連接,之後在解決方案下建立項目作為資料互動層,再在該項目下建立EF。
1. 建立資料庫連接。
2. 建立ADO.Net 資料庫實體
3. 選擇Code First, 這裡我是已經存在資料庫了。
4. 可以看到結果已經建立好所有被選中的資料表實體模型了。
接下來我們寫一段代碼進行資料訪問。在我的樣本裡,我們計劃查詢的一張表目前的資料量是在100萬條記錄以上。我們進行簡單的select查詢。
public void Test1_Select(){ Model1 modelContext = new Model1(); //select from rt_LeakProbe var temp = modelContext.rt_LeakProbe.toList(); long count = temp.Count();
DateTime lastDate = temp.GroupBy(x => x.UploadTime).Max(x => x.Key); Console.WriteLine("count is: {0}; last Data Time is :{1};", count, lastDate.ToString("yyyy-MM-dd HH:mm:ss:ffff"));}
在我們使用 db First建立了資料表的實體同時,得到了一個預設命名為 Model1的類。這個類實際上是我們操作所有資料表的核心。在前一張中可以看到,Model1 是繼承了DbContext類。
關於DbContext類,可以理解成一個具備訪問設定項目的基類,在這裡,我們要訪問的項目就是在這個項目的App.Config中能夠找到的配置項。(你也可以認為就是資料庫連接)
以上代碼使用MS Test架構建立單元測試形式來測試。
需要注意的是,MS Test同樣需要使用NuGet進行EF的安裝以便正常讀取到資料庫連接配置。
查詢結果, 資料量 1067189, 最新紀錄上傳時間是11:54:25.777。
相信EF的優勢已經有所體現。當然個人暫時認為是存在一定不足的,比如說業務表設計中是可以使用繼承方式簡化一部分操作,而無論EF、Hibernate還是 Linq2Sql都提供直接的Mapping功能,這樣再去做繼承很麻煩。
但是實際上直接的Mapping在資料庫設計非常合理的前提下,是最簡單可靠的做法。
總而言之,EF這類工具非常高效,大幅簡化開發人員花在搭建資料層所需要的時間。個人也認為,使用EF的效率是高於Hibernate和動軟之類工具的。
【Visual Studio】 使用EF、 Linq2Sql快速建立資料互動層(一)