首頁 關於聖擎 技術支援 服務項目 連絡我們  
 

產品規格

 

產品資訊

什麼是 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 秒鐘之內產生。

本網站版權屬「聖擎科技股份有限公司」所有,請勿任意轉載