什麼是 ORM (Object Relational Mapping) ?

ORM (Object Relational Mappings) 是直接將資料庫 schema
對應成類別程式庫的一項技術,如上圖,在軟體工程中,我們可以使用 Object Role Modeling 以及 ER Modeling
之類的方式將需求轉換成實際的資料庫結構 (schema),也可以進一步使用 UML Class Modeling 來產生類別程式庫的骨架
(僅有類別定義,方法、屬性、事件只有空架構,並沒有產生真正的實作程式碼),然後程式開發人員再替這些骨架加上程式碼,姑且不論有多少軟體開發人員能夠用這些軟體工程的技術來分析、設計軟體架構,光是要替這些骨架加上程式碼,就得花上非常多寶貴的研發時間。
Object Relational Mapping (ORM)
所要達到的,就是直接從資料庫結構中,產生出對應的類別程式庫,並且在程式庫中實作出相關的資料操作程式碼,例如在下圖中有一個表格 Customers,ORM
可以將這個表格對應成一個 Customer 類別,而表格的每個欄位就對應成 Customer 類別的一個屬性,並且在類別中加上資料操作的相關方法與事件,例如
Delete() 方法用來刪除 Customer 物件。

假設我們要從 Customer 表格中找出一個 ID 欄位為 123 的客戶,印出他的地址,並且檢查他的 City 欄位是不是 "New
York",如果是就將這筆客戶資料的 City 欄位改成 "Paris" :
傳統存取這個表的程式碼會類似下面這樣:
Dim Conn As SqlConnection
Conn = New SqlConnection("Server=localhost;Database=MyDatabase;UID=sa;PWD=123")
Dim cmdSelect As SqlCommand
cmdSelect = New SqlCommand("SELECT * FROM Customers WHERE ID=123", Conn)
Conn.Open()
Dim dr As SqlDataReader
dr = cmdSelect.ExecuteReader()
If dr.Read() Then
MessageBox.Show(dr("Address"))
Dim City As String
City = dr.GetString(4)
dr.Close()
If City = "Yew York" Then
Dim cmdUpdate As SqlCommand
cmdUpdate = New SqlCommand("UPDATE
Customers SET City=@City", Conn)
cmdUpdate.Parameters.Add("@City",
SqlDbType.VarChar, 50)
cmdUpdate.Parameters("@City").Value =
"Paris"
cmdUpdate.ExecuteNonQuery()
End If
Else
dr.Close()
Conn.Close()
End If
但是使用 ORM 之後,就可以變得非常直覺:
Dim peter As New Customer("ID=123")
If peter.IsLoaded Then
MessageBox.Show(peter.Address)
If peter.City = "New York"
peter.City = "Paris"
peter.Update()
End If
End If
我們甚至可以直接處理關聯性,例如使用以下語法取得客戶的第 4 筆訂單中的第 3 筆訂單明細所訂產品的名稱:
Dim peter As New Customer("CompanyName='System Engine Technology Co. Ltd'")
MessageBox.Show(peter.Orders(3).Order_Details(2).Product.ProductName)
從以上簡單的例子,我們就可以非常的清楚了解,ORM 技術的優勢所在了,而這些 ORM 相關類別就可以直接使用 ORM Framework Builder
直接在 5 秒鐘之內產生。
|