C#使用sqlite-net搭建簡易的ORM

来源:https://www.cnblogs.com/kiba/archive/2019/07/16/11149685.html
-Advertisement-
Play Games

SQLite簡易版ORM 首先打開項目,使用nuget搜索sqlite-net,如下圖: 下載完成後,我們會多出兩個文件,SQLite.cs和SQLiteAsync.cs。 我們新建一個文件夾SQLiteResources,把這倆文件放進去。 然後我們創建兩個表實體,如下: 接下來我們創建一個SQL ...


SQLite簡易版ORM

首先打開項目,使用nuget搜索sqlite-net,如下圖:

下載完成後,我們會多出兩個文件,SQLite.cs和SQLiteAsync.cs。

我們新建一個文件夾SQLiteResources,把這倆文件放進去。

然後我們創建兩個表實體,如下:

public class Valuation
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    [Indexed("ValuationStockId2",1)] //索引,註意,該索引在表創建時,會創建,如果索引改名,舊索引依然存在,並未被刪除
    public int StockId { get; set; }
    public DateTime Time { get; set; }
    public decimal Price { get; set; }
}
public class Stock
{
  [PrimaryKey, AutoIncrement]
  public int Id { get; set; }
  public string Symbol { get; set; }
}

接下來我們創建一個SQLiteHelper,用來管理Sqlite資料庫,如下:

public class SQLiteHelper
{
    public string connstr = Path.Combine(Environment.CurrentDirectory, "User.db");//沒有資料庫會創建資料庫
    public SQLiteConnection db;
    public SQLiteHelper()
    {
        db = new SQLiteConnection(connstr);
        db.CreateTable<Stock>();//表已存在不會重覆創建
        db.CreateTable<Valuation>();
    }

    public int Add<T>(T model)
    { 
       return db.Insert(model);
    }

    public int Update<T>(T model)
    {
        return db.Update(model);
    }

    public int Delete<T>(T model)
    {
        return db.Update(model);
    }
    public List<T> Query<T>(string sql) where T : new()
    {
        return db.Query<T>(sql);
    }
    public int Execute(string sql) 
    {
        return db.Execute(sql);
    }
} 

到此,我們的簡易版ORM就搭建好了,下麵讓我們一起試用下這個ORM。

首先我們添加一個項目,SqliteTestConsole。

然後在Main函數中寫上測試代碼如下:

static void Main(string[] args)
{
    SQLiteHelper sqliteHelper = new SQLiteHelper();
    var list = sqliteHelper.Query<Stock>("select * from Stock");
    sqliteHelper.Add(new Valuation() { Price = 100, StockId = 1, Time = DateTime.Now });
    var list2 = sqliteHelper.Query<Valuation>("select *  from Valuation");
    var list3 = sqliteHelper.Query<Valuation>("select *   from Valuation INDEXED BY ValuationStockId2 WHERE StockId > 2");//使用索引ValuationStockId2查詢
    try
    {
        sqliteHelper.Execute("drop index ValuationStockId");//刪除索引,因為該索引已被刪除,所以拋異常
    }
    catch (Exception ex)
    {

    }
}

 然後運行調試,會拋出異常如下:

那麼我們到底缺少什麼依賴文件呢?

打開SQLite.cs文件,我們會發現如下代碼:

如上圖所示,我們缺少了依賴dll—sqlite3.dll。

下麵我們打開sqlite的官網尋找並下載依賴動態庫【Sqlite官網下載網址

因為項目使用x86的Framework4.6.1,所以我們要找到對應的sqlite版本。

下載完成後,我們可看到如下文件。

 

我們把其中的sqlite3.dll移動到項目的輸出目錄【X盤\SqliteTestConsole\bin\Debug】下麵。

然後我們運行項目,項目依然提示錯誤。

 這是因為我們的下載的sqllite3.dll是x86的版本,所以我們要把Any CPU修改為x86,選擇【配置管理器】,如下圖:

然後我們再運行測試項目就可以正常編譯通過了。

現在,我們再使用sqlitebrowser打開我們創建的User.db查看數據。

sqlitebrowser是一個sqlite的開源管理工具,下載地址:https://github.com/sqlitebrowser/sqlitebrowser

 

 如圖所示,我們已經成功創建了表,並完成了插入數據操作。

----------------------------------------------------------------------------------------------------

到此SQLite的簡易ORM就已經搭建完成了。

代碼已經傳到Github上了,歡迎大家下載。

Github地址:https://github.com/kiba518/SQLite_net.Helper

----------------------------------------------------------------------------------------------------

註:此文章為原創,歡迎轉載,請在文章頁面明顯位置給出此文鏈接!
若您覺得這篇文章還不錯,請點擊下方的推薦】,非常感謝!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第一章 Unity人工智慧架構模型: 人工智慧: 感知(Sense) 思考(Think) 行為(Act) 迴圈 感知:AI和游戲的所有介面,比如敵人是否靠近 ==》思考:根據感知的結果 , 選擇行為、逃跑 ==》行為:執行行為 決策類游戲:《吃豆人》中的有限狀態機 潛行感知類游戲:《黃金眼》中如果自 ...
  • 第一章 1.1.2 C#2中的強類型集合 不再有代碼或者變了和屬性關聯,必須處處使用屬性,增強了一致性 ​ 1.2 排序和過濾 排序: ​ c#1 弱類型的比較功能:需要內部創建代碼來進行強轉,繁瑣。遇到強轉不成功時容易出錯。故實現介面時直接指定需要轉的類型。 ​ c#2 以不同方式進行排序: 通過 ...
  • 大二做B/S架構的項目使用了安衡電子秤CHS-D+R和一款掃碼槍,兩個設備的串口使用一樣,這款電子秤是相當的坑,沒有開發的api,無奈只能自己開發Activex了,在B/S架構中進行引用Activex的Guid能夠達到使用本地串口的最終目的. Activex中首先要進行安全簽名的設置 [ComImp ...
  • 大二的一個項目需要用到Activex技術將讀取到串口中的數據在後臺獲取到,並將串口的數據寫入資料庫,這個過程需要在後臺使用C#調用Activex控制項已經使用的方法,然後在前端通過JavaScript進行調用串口的數據進行賦值 <script type="text/javascript"> funct ...
  • 獲取網路文件,通過流保存文件。 //網路路徑文件 string pathUrl = "http://localhost:805/js/site.zip"; System.Net.HttpWebRequest request = null; System.Net.HttpWebResponse res ...
  • 項目中有些時候需要用到正則表達式,但是自己對正則表達式不熟悉,每次學習完,過一段時間(長時間)不用,就又忘了,每次需要用到的時候都需要百度下,比較麻煩,這裡把C#中經常用到的正則表達式做下總結。 正則表達式常用的環境 爬蟲、網站數據驗證、日誌分析、字元串替換、獲取子字元串、文本處理、字元串處理等 正 ...
  • 學習筆記,第一次記錄避免忘記 首先介紹一下本地環境是windows2008 R2-64位。 1. 到nginx官網上下載最新穩定版的安裝包,http://nginx.org/en/download.html; 2.下載後解壓到對應文件夾 3.使用cmd命令進入文件目錄,輸入nginx.exe或者st ...
  • 在這一篇文章中我們創建一個菜單,並通過這個菜單調用我們之前寫的增刪除改查的功能。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...