LINQ TO SQLite實踐指南

2021-06-07 03:30:05 字數 2294 閱讀 4957

前言

當前,軟體應用程式中,資料庫已經成為不可缺少的重要組成部分.然而傳統資料庫正趨向巨無霸化,對系統的要求一步步提高,管理成本也越來越大,對於中小型專案的應用,它的很多功能變得越來越多餘,但是我卻不得不為這些不需要的功能付出更多的資金和人力成本. 在這些場景,嵌入式資料庫的輕量,零部署,跨平台,義移植,無疑有著傳統資料庫無可比擬的優點,當然為此我們必須放棄高容量,高效能,高併發,不過誰在乎這些呢?我們只是中小型應用而已,大小不上百萬,併發不超萬^_^.

自從dlinq出來之後,我的專案越來越依賴於它,它讓我們的程式更加優雅清晰,再也不用無聊的拼湊一段又一段的sql,編寫一遍又遍的配置.可惜的是ms只提供linq to sql(ms sql server)的實現. 還好linq思想出現之後,社群裡湧現了各種各樣的linq provider程式,大有一切皆linq的架勢(linq to everything),sqlite自然不例外.今天我們進來嘮嘮如何將sqlite引入我們的開發.

ado.net provider&linq provider

這樣子你就可以在vs的server explorer裡面像管理sql server的資料庫一樣管理你的sqlite資料庫檔案.安裝完之後,我們得到以下檔案

建立資料庫

要建立乙個空的sqlite資料庫,可以選擇兩種方式.

.db3字尾名可以任意,你也可以使用其他的任意字尾名.

在sqlite>的shell下,必須輸入什麼,如果直接.exit退出的話,資料庫檔案將不會被建立

資料庫檔案建立好了之後,拷貝到你想要的位置,然後開啟vs的server explorer(當然如果你使用gui程式,你就不需要vs的這個功能了),我們可以在裡面維護表資訊

我們先設計兩個表,以便繼續下面的步驟.

建立專案

建立datacontext

當你將表拉入dbml的時候,會得到如下錯誤"the selected object(s) use an unsupported data provider."

dbml designer和dlinq一樣,微軟只實現了for sql server的功能,其他資料庫都沒實現.既然不能生成dmbl,那我們生成code就好了,反正這個layout我們一般也沒什麼用.找到從windows sdk目錄下找到code generation tool (sqlmetal.exe). 不幸的是,這個東東也只支援ms本家的東西,而且不支援generator擴充套件-_-!!!.

既然phxsoftware提供的linq porivder,說不定有提供自定義的**生成工具.不過看來看去,發現只支援entity frameworkd entity model的生成,但是沒有linq to sqlite的支援(dotconnect for sqlite 倒是對二者都支援).

難道我們要手動編寫datacontext?怎麼可能,肯定有人實現了,google下,找到了乙個dlinq2007的專案,提供好多linq provider的實現(包括sqlite).發現裡面有個dbmetal.exe,支援從sqlite生成datacontext類.雖然不如ms的的完美,不過能自動生成基本的datacontext,這就是最大的收穫,不然像我這麼依賴linq的人只好放棄sqlite了^_^.dbmetal.exe生成datacontext的命令列,類似sqlmetal.exe.

dbmetal.exe /database:testdatacontext  /schema /namespace=linqtosqlite /sprocs /entityinte***ces= /culture="en"  /code=test.cs /provider=sqlite  /conn="data source=d:\doc\my\data\code\linqtosqlite\dlls\test.db3"

/database指定類名, /namespace=linqtosqlite指定命名空間...,具體的引數可以在命令列下獲取到(dbmetal.exe /?).

不過這個dbmetal.exe一樣不完善,不是什麼結構都可以生成,比如資料庫帶有外來鍵的話,生成就會出錯.

生成後的**大概如下(可能需要手工清理下systemtable的對應的class):

public partial class testdatacontext : dblinq.data.linq.datacontext

public testdatacontext(system.data.idbconnection connection, dblinq.vendor.ivendor vendor)

: base(connection, vendor)

public table order }

public table orderitem }

} 原文出處:

hibernate SQLQuery實踐指南

兩個表 實體 1對多雙向關聯 班級 clazz id,name 學生 student id,name class id 1.1 簡單查詢,返回資料庫結構 view plain copy to clipboard print?sql?select?c.from?clazz?c,student?s?wh...

hibernate SQLQuery實踐指南

hibernate sqlquery實踐指南 兩個表 實體 1對多雙向關聯 班級 clazz id,name 學生 student id,name class id 1.查詢持久化物件 1.1 簡單查詢,返回資料庫結構 sql select c.from clazz c,student s wher...

Linux系統命令及Shell指令碼實踐指南筆記

系統執行級別 執行級0 關機 執行級1 單使用者模式,系統出現問題時可使用這種模式進入系統維護,典型的使用場景 就是在忘記root密碼時可進入次模式修改root密碼。執行級2 多使用者模式,但是沒有網路連線。執行級3 完全多使用者模式,這也是linux伺服器最常見的執行級。執行級4 保留未使用。執行...