Object-Relational Mapping
什麼是ORM
為什麼要用ORM?
物件化有什麼好處?
架構
Main topic
ORM Solution
Entity Framework
Open Source
支援多種關聯性資料庫
兩大類別
Environment
Three Model
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()
查詢
查詢快取
不查詢快取
關聯
載入關聯
三種載入方式
消極式載入
(Lazy Loading)
明確式載入
(Explicitly Loading)
LazyLoadingEnabled=false
需要關聯資料時,不會自動載入
積極式載入
(Eager loading)
Include()
弱型別關聯
強型別關聯
Load()
直接載入關聯表
怎麼選擇?
當網路有問題,可選擇積極式載入,可減少網路往返
但如果載入太多實體,回傳的封包就會越大,這時可切換到消極式載入
不確定現階段會使用哪些關聯,選擇消極式載入,可避免一次載入太多實體,程式碼也會比較容易閱讀

Sample Code:RelationLoading
刪除關聯
交易
效能調效
資料變更CUD,停用自動偵測變更
物件快取不驗證
無法由快取更新到資料庫
不查詢快取
AsNoTracking
NHibernate
LINQ to SQL
Dapper
...
效能
SQL Tools
Source Control
Floating topic
這個Conversation有什麼?
快速開發存取資料庫的應用程式
幾個寫程式的小技巧,減少Hard Code
Live Demo / Demo Code Download
幾個不錯用的SQL工具
希望不是只是我在嘴砲,大家都能夠動手練習
要有心理準備,今天可能講不完
這個Conversation沒有什麼?
不是速成班,內化要靠自己
氣氛美好的燈光
點心、飲料
名詞
DTO
Data Transfer Object
POCO
Plain Old CLR Objects