用dotnet core搭建web服務器(三)ORM訪問數據庫


訪問傳統sql數據庫,大家以前都是用sql語句去查詢。這些年流行orm方法

ORM是對象關系映射的簡拼,就是用一個對象(class)去表示數據的一行,用對象的成員去表述數據的列


dotnet 官方很早就有orm模型 entiry framework,這里我們就以 mysql/miriadb 為例

說明 entiry framework的使用


代碼在這里

https://gitee.com/lightsever/netcore_study/tree/master/server03_orm


第一步、搭建數據庫環境

image

我比較偷懶,直接xampp搭建,這樣比較簡單。

mysql數據庫 注意端口,圖上有 3306

啟動apache 和 mysql 服務

然后點擊mysql行的admin 可以打開phpmyadmin頁面直接管理數據庫

image

創建一個用來測試的庫,我就叫他testdb

第二步,ORM框架的安裝

創建 dotnet core 項目,引入 lib.http 這些略,搭建一個http服務來測試

安裝nuget包

Pomelo.EntityFrameworkCore.MySql


nuget包安裝方法略


第三步,編寫模型代碼

image

定義這樣兩個對象

Item1就是 ORM的O,一個Item1的實例,就是數據庫中的一行,當然ORM框架不止可以針對SQL數據庫,准確的說應該是當ORM映射到一個sql數據庫時,一個item1的實例就是數據庫中的一行

其中id是主鍵,用[key]attribute標記


MyDbObj是數據對象,他必須繼承自DbContext,他里面的items成員,注意表示是一個表,一樣,是映射到sql數據庫時。

items的成員名就會被映射到表名

還要注意一下重載onConfiguring 並指定sql連接字符串

Server 是mysqlserver的 ip或域名

port 3306 我們之前專門提過

database 就是我們創建的庫,testdb

user 是root,xampp創建的sql 超級管理員賬戶

password,默認密碼為空

第四步,初始化數據庫

image

我們定義了一個靜態變量dbobj,因為數據庫只需要連接一次

EnsureCreateAsync 會檢查數據庫,我們需要的表是否都建立,如果沒有會創建表。

image

用dbinit觸發他

image

然后刷新phpmyadmin 就能看到一個叫做items的表被創建了出來

第五步,寫入數據庫

image

orm的特點就是寫入簡單

只需要向items里面添加一個實例。然后SaveChangesAsync就好

一樣你可以用dbwrite觸發后觀察

第六步,查詢數據庫

image


image

查詢時使用linq方式 查詢dbobj的對應dbset成員即可。

比如查詢items表,只要用linq的where指令即可

這個不會真的觸發查詢,你需要用ToArray 或者 foreach 遍歷這個list時才查詢。

推薦永遠使用 Async方法,雖然ToArray()很親切,但內部的死循環會讓httpserver的性能變差。

第七步 潛在的缺陷

因為aspnetcore的http server 是個多線程模型,所以現在那個初始化數據庫是線程不安全的


image

線程安全對大部分不合格的程序員來說,都是一個困難的命題,好在,只要堅持每個業務請求都是上下文無關的,所有的線程安全都可以集中在業務和框架的連接處,也就是只有數據庫組件的初始化可能存在線程安全問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM