習慣使用 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 加入到專案裡,
NuGet Gallery | LINQ to Access 1.0.1
https://www.nuget.org/packages/linq2db.Access/
開啟 Visual Studio 的「套件管理器主控台」,複製「Install-Package linq2db.Access」指令,在套件管理器主控台貼上(或輸入)後執行,
安裝之後會在專案裡建立 LinqToDB.Templates 資料夾,不過我們在這篇文章裡先不用裡面的檔案,
再來建立 Customer.cs 類別檔案,類別裡的屬性名稱、類型都要對應 Northwind.mdb 裡的 Customer,這邊的類別名稱與 Northwind.mdb 的 Customer 表格名稱一致,
接著打開 Program.cs 檔案,開始要來寫程式,先準備好連接字串,
主要程式,將 Customer 的資料全部讀取並做排序,記得要加入「LinqToDB.DataProvider.Access」命名空間的引用,程式裡的 AccessTools.CreateDataConnection() 是 Linq To Access 所提供的方法,藉由這個方法建立 Data Context,然後用 GetTable<T>() 方法就可以對 Customer 使用 LINQ 操作,
執行結果
Distinct 操作
Group 操作
上面是直接使用 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
以上
沒有留言:
張貼留言