Object-Relational Mapping

什麼是ORM

為什麼要用ORM?

物件化有什麼好處?

架構

說好的MariaDB呢?

Main topic

ORM Solution

Entity Framework

Open Source

a

支援多種關聯性資料庫

兩大類別

Environment

Three Model

Database First

Model First

Code First

為什麼要用Code First

如何使用?

Sample Code:SimpleCodeFirst

Sample Code:SimpleCodeFirst

a

類型探索

連線字串

Update Schema

步驟

Enable-Migrations

Enable-Migrations -EnableAutomaticMigrations

r

自動轉移,只對新增欄位有效,刪除、修改無效

Enable-Migrations –ContextTypeName [DbContext Class Name]

r

如果專案裡不只一個 DbContext 類別的話,可以原本的指令後面 DbContext 類別名稱enable-migrations –ContextTypeName BlogSample.Models.SampleContext

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> 的實作。

r

Database.SetInitializer(new MigrateDatabaseToLatestVersion<CustomerDbContext, AppCodeFirst.Migrations.Configuration>());

繼承

CRUD

建立

DbSet.Add()

刪除

DbSet.Remove()

存檔

DbContext.SaveChanges()

查詢

查詢快取

不查詢快取

r

如果您在唯讀情節中,並想避免將物件載入 ObjectStateManager 的額外負荷,您可以發出「非追蹤」查詢。變更追蹤可在查詢層級停用。請注意,即便如此,停用變更追蹤可讓您有效地關閉物件快取。但是當您查詢實體時,將無法從 ObjectStateManager 提取之先前具體化的查詢結果,來略過具體化。如果您重複查詢相同內容中的相同實體,您可能會實際目睹啟用變更追蹤的效能優點。使用 ObjectContext 進行查詢時,ObjectQuery 和 ObjectSet 執行個體會記住設定的 MergeOption,且針對這些執行個體撰寫的查詢將繼承上層查詢的有效 MergeOption。使用 DbContext 時,可透過在 DbSet 上呼叫 AsNoTracking() 修飾詞來停用追蹤。

關聯

POCO Proxy

載入關聯

三種載入方式

消極式載入
(Lazy Loading)

明確式載入
(Explicitly Loading)

LazyLoadingEnabled=false

需要關聯資料時,不會自動載入

積極式載入
(Eager loading)

Include()

r

var find = context.Products.Include("Orders").FirstOrDefault(o => o.Id == 1)

弱型別關聯

強型別關聯

Load()
直接載入關聯表

怎麼選擇?

當網路有問題,可選擇積極式載入,可減少網路往返

但如果載入太多實體,回傳的封包就會越大,這時可切換到消極式載入

不確定現階段會使用哪些關聯,選擇消極式載入,可避免一次載入太多實體,程式碼也會比較容易閱讀

Sample Code:RelationLoading

Sample Code:RelationLoading

a

刪除關聯

交易

效能調效

資料變更CUD,停用自動偵測變更

r

context.Configuration.AutoDetectChangesEnabled = false;

物件快取不驗證

無法由快取更新到資料庫

不查詢快取

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