2014年3月18日 星期二

LINQ 與 Access - 使用 LINQ to Access

習慣使用 Entity Framework 之後,幾乎專案的開發都不會使用其他的資料存取方式,而之前的文章說過 Entity Framework 並不支援 Access,所以才會使用 Typed DataSet 來存取 Access,但還是覺得一定有什麼方式是近似於我平常習慣的開發方式,後來我找到了 LINQ to Access 這個套件,而且使用起來還算簡單,畢竟使用 Access 作為資料儲存媒體的專案並不會有太複雜的操作,可以做為解決方案,而且其底層 LINQ to DB 還有實做各種資料庫的 Data Provider,大家有時間的話可以玩玩看。

P.S.
LINQ to Access 與 LINQ to SQL 或是 ADO.NET Entity Framework 並沒有直接關係,所以不要以為 LINQ to Access 是 LINQ to SQL 或 EntityFramework 的擴充,與 Oracle ODAC for EntityFramework  之於 EF 是不一樣。

 


LINQ to DB

https://github.com/linq2db/linq2db

LINQ to DB  Code Examples

https://github.com/linq2db/examples

LINQ to DB Code Examples -  Access

https://github.com/linq2db/examples/tree/master/Access

 

這邊可以先跳過上面所提供 Examples 連結裡面的作法,這邊在 Console 專案裡來做個簡單的示範,建立好專案並且將 Northwind.mdb 加入到專案裡,

image

 

NuGet Gallery | LINQ to Access 1.0.1

https://www.nuget.org/packages/linq2db.Access/

image

開啟 Visual Studio 的「套件管理器主控台」,複製「Install-Package linq2db.Access」指令,在套件管理器主控台貼上(或輸入)後執行,

image

安裝之後會在專案裡建立 LinqToDB.Templates 資料夾,不過我們在這篇文章裡先不用裡面的檔案,

image

再來建立 Customer.cs 類別檔案,類別裡的屬性名稱、類型都要對應 Northwind.mdb 裡的 Customer,這邊的類別名稱與 Northwind.mdb 的 Customer 表格名稱一致,

image

 

接著打開 Program.cs 檔案,開始要來寫程式,先準備好連接字串,

image

主要程式,將 Customer 的資料全部讀取並做排序,記得要加入「LinqToDB.DataProvider.Access」命名空間的引用,程式裡的 AccessTools.CreateDataConnection() 是 Linq To Access 所提供的方法,藉由這個方法建立 Data Context,然後用 GetTable<T>() 方法就可以對 Customer 使用 LINQ 操作,

image

執行結果

image

 

Distinct 操作

image

image

 

Group 操作

image

image

 

上面是直接使用 Linq To Access 所提供的方法做資料的存取操作,但其實比較好的方式還是使用它所提供的 T4 Template 來產生相對映的 Data Context,這樣我們可以連物件的類別檔都不用自己手動產生,與 Typed DataSet 的方式相比,會輕巧許多(但如果有需要製作報表或是圖表的功能,我還是建議直接使用 Typed DataSet)。

下一篇就以 ASP.NET MVC 專案然後使用 Linq To Access 所提供的 T4 Template 來做說明。

 

LINQ to Access 與 LINQ to SQL 或是 ADO.NET Entity Framework 並沒有直接關係,所以不要以為 LINQ to Access 是 LINQ to SQL 或 EntityFramework 的擴充,與 Oracle ODAC for EntityFramework  之於 EF 是不一樣。

特別強調這一點就是怕有人以為使用 LINQ to Access 後就可以在 EntityFramework 裡使用 Access(這是不行的),LINQ to Access 是獨立的,不必依存於 EntityFramework,而是透過它本身的資料存取機制,讓我們在程式裡可以使用 LINQ 語法來存取 Access 裡的資料。

 

相關連結

IT's Blog: LINQ to DB. Introduction.

LINQ to DB

https://github.com/linq2db/linq2db

LINQ to DB  Code Examples

https://github.com/linq2db/examples

LINQ to DB Code Examples -  Access

https://github.com/linq2db/examples/tree/master/Access

NuGet Gallery | LINQ to Access 1.0.1

https://www.nuget.org/packages/linq2db.Access/

NuGet Gallery | Packages matching linq2db

http://www.nuget.org/packages?q=linq2db

 

以上

沒有留言:

張貼留言

提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。