ADO.NET Note

ADO.NET Note

ADO.NET

  • 負責資料存取的class library

  1. 用來對DB做CRUD
  2. 不同類型DB要使用不同namespace
  3. 目前mysql的namespace有bug
  4. 修改DB時,用parameter的方式避免sql injection
DataAdapter DataReader
連結資料庫 不用,會自動開啟關閉 SqlConnection.Open()
執行SQL指令 SqlDataAdapter.Fill().Open() SqlCommand ExecuteReader() ExecuteNonQuery()
資料指標移動 讀到記憶體裡 順向且唯獨
如何處理資料 可以處理複雜資料庫關聯跟多個DataTable 適合單一資料表
消耗資源 較大 較小
分頁 有 無

Entity Framework

LINQ

  • 該語言有查詢資料的能力

  1. 查詢資料時不需另外學習查詢語法(xml或sql),可以用該語言的語法查資料
  2. 有形別檢查以及auto complete
  3. 用來對obj或sql進行查詢的介面(provider),例如

LINQ-to-SQL

  • 僅支持SQL Server的ORM

LINQ-to-DataSets

  • 用LINQ查詢DataSets的物件(在用ORM之前,只能用ADO.NET處理DataSets或DataTables等物件)

LINQ-to-Object

  • 把LINQ查詢直接和IEnumerable一起用,不使用provide例如LINQ to SQL等,可以查詢任何Enumerable的集合

  • IEnumerable介面
  • 能夠避免使用foreach循環等複雜方式從集合中搜尋資料

IEnumerable

  • data來自memory,所以把IQueryable的東東用AsEnumerable轉換,會把整個表存進去memory,效率低
  • ToList會用到

LINQ-to-Entities

  • 是一個Query Provide


IQueryable

  • 不能用LINQ to Object的用法
  • Data來自SQL,跑的時候會把操作合併成一條SQL語言,查詢資料庫,效率高

比較及使用場景

IEnumerable IQueryable
data來源 memory SQL
lazy load特性 有 有
使用場景 查詢資料庫 查詢memory內的資料(本地)

lazy load:使用前才跑SQL
IQueryable特性實驗
AsEnumerable和AsQueryable使用時機

Raw SQL Query

  • 在EF Core之下,可以直接下SQL指令,可以搭配LINQ使用
  • 搭配LINQ時,必須用Select開頭的查詢SQL語法
  • 單純讀取資料可以用加上AsNoTracking(),取消對變更的追蹤,執行速度會更快

Database First

  • 從現有資料庫產生程式碼

  • 有GUI
  • 適合原本就有資料庫,當資料庫定義更新,可以直接update到模型檔(.edmx),更新後資料會消失要注意
  • 性能較差,適合初學者或資料庫結構成熟穩定的方案

Code First

  • 用程式碼產生資料庫,和Model First方法類似,只是改成用程式碼設計POCO模型

  • 沒有GUI
  • MS推薦的開發方式
  • 原本沒有資料庫,先用class定義好資料庫的內容,沒有資料庫也可以用工具生成class

Step

  1. 定義好資料模型和xxxContext
    • 建立資料模型,主要是新建一個class,裡面宣告欄位,用Fluent API或Data Annotations定義欄位大小或Primary Key等資料欄位
    • 資料模型內預設用Id作為Primary Key,也可以自行定義ExampleId名稱,用Data Annotation 加上[Key]的Tag
    • xxxContext定義操作資料庫的細節
優 缺
Fluent API 保持POCO乾淨,可以做table關聯 不能給前端驗證
Data Annottations 可用來給前端驗證,scaffolding可以生成view,但也會暴露model結構給前端 Table關聯不好做
  1. 在program.cs設定好connectString
  2. 輸入遷移指令
    dotnet ef migrations add init --context xxxContext
  3. 輸入更新指令
    dotnet ef database update --context xxxContext

Model First

  • EF Core已移除
  • 用工具設計EDM後再生成資料庫和程式碼

  • 有GUI
  • 設計模型時可以完全了解資料庫結構

RESTful API

沒空繼續寫…

留言