Object-Relational Mapping
什麼是ORM
為什麼要用ORM?
物件化有什麼好處?
架構
說好的MariaDB呢?
Main topic
ORM Solution
Entity Framework
Open Source
支援多種關聯性資料庫
兩大類別
Environment
Three Model
Database First
Model First
Code First
為什麼要用Code First
如何使用?
Sample Code:SimpleCodeFirst
類型探索
連線字串
Update Schema
步驟
Enable-Migrations
Enable-Migrations -EnableAutomaticMigrations
Enable-Migrations –ContextTypeName [DbContext Class Name]
Enable-Migrations -ConnectionStringName DefaultConnection
Add-Migration
Add-Migration [有意義的名稱]
Add-Migration InitialCreate
第一次執行新增資料庫移轉
Add-Migration AddPostAbstract
最佳猜測建立結構
Add-Migration InitialCreate -IgnoreChanges
建立空的 DbMigration,主要用來更新已存在的Database
Update-Database
Update-Database -Verbose
查看「Code First 移轉」所執行的 SQL
MigrateDatabaseToLatestVersion
表示使用 Code First 移轉以將資料庫更新至最新版本之 IDatabaseInitializer<TContext> 的實作。
繼承
CRUD
建立
DbSet.Add()
刪除
DbSet.Remove()
存檔
DbContext.SaveChanges()
查詢
查詢快取
不查詢快取
關聯
POCO Proxy
載入關聯
三種載入方式
消極式載入
(Lazy Loading)
明確式載入
(Explicitly Loading)
LazyLoadingEnabled=false
需要關聯資料時,不會自動載入
積極式載入
(Eager loading)
Include()
弱型別關聯
強型別關聯
Load()
直接載入關聯表
怎麼選擇?
當網路有問題,可選擇積極式載入,可減少網路往返
但如果載入太多實體,回傳的封包就會越大,這時可切換到消極式載入
不確定現階段會使用哪些關聯,選擇消極式載入,可避免一次載入太多實體,程式碼也會比較容易閱讀
Sample Code:RelationLoading
刪除關聯
交易
效能調效
資料變更CUD,停用自動偵測變更
物件快取不驗證
無法由快取更新到資料庫
不查詢快取
AsNoTracking
NHibernate
LINQ to SQL
Dapper
...
效能
SQL Tools
安全性
Source Control
SQL Server Express LocalDB
Floating topic
這個Conversation有什麼?
快速開發存取資料庫的應用程式
幾個寫程式的小技巧,減少Hard Code
Live Demo / Demo Code Download
幾個不錯用的SQL工具
希望不是只是我在嘴砲,大家都能夠動手練習
要有心理準備,今天可能講不完
這個Conversation沒有什麼?
不是速成班,內化要靠自己
氣氛美好的燈光
點心、飲料
名詞
DTO
Data Transfer Object
POCO
Plain Old CLR Objects