C#發現之旅第十二講 基於反射和動態編譯的快速ORM框架(下)(6)
在代碼生成器 中生成FillUpdateCommand代碼文本的代碼為myWriter.WriteLine(public override int Fill
C#發現之旅第十二講 基於反射和動態編譯的快速ORM框架(下)(8)
動態編譯在代碼生成器成功的生成所有的C#源代碼文本 後,我們就可以執行動態編譯了,函數MyFastORMFramework.BuildHelpers就是實現動
C#發現之旅第十二講 基於反射和動態編譯的快速ORM框架(下)(9)
在本函數中,我們遍歷實體Lexington注冊列表,找到所有沒有裝備數據庫操 作幫助器的實體類型,添加到RecordTypes列表中,然後調用Generate
C#發現之旅第十二講 基於反射和動態編譯的快速ORM框架(下)(10)
這個函數的 參數是SQL查詢語句和實體對象類型。在這個函數中,首先是調用CheckConnection函數來檢 查數據庫的連接狀態,然後使用GetHelper
C#發現之旅第十二講 基於反射和動態編譯的快速ORM框架(下)(11)
新增數據 InsertObject快速ORM框架定義了 InsertObject函數用於新增數據庫記錄,其代碼為public int InsertObjec
C#發現之旅第十二講 基於反射和動態編譯的快速ORM框架(下)(12)
該演示程序主要代碼為/// <summary>/// 連接數 據庫,創建快速ORM框架對象/// </summary>/// <
C#發現之旅第十二講 基於反射和動態編譯的快速ORM框架(上)(1)
動態編譯技術所謂動態編譯技術就是應用程序在運行時,程序內部自動的生成C# 代碼,然後調用.Net框架提供的C#程序編譯器生成臨時的程序集,然後將臨時程序集加載
C#發現之旅第十二講 基於反射和動態編譯的快速ORM框架(上)(2)
動態編譯 技術中生成的臨時程序集和我們使用開發工具生成的程序集沒有差別,運行速度是一樣的快 。因此動態編譯技術除了能實現靈活的功能外還提供良好的性能。我們要使
C#發現之旅第十二講 基於反射和動態編譯的快速ORM框架(上)(3)
我們設計快速ORM框架的程序結構如 圖所示框架中包含了一個實體類型注冊列表,列表中 包含了實體類型和相應的RecordORMHelper對象。應用程序在使用框
C#發現之旅第十二講 基於反射和動態編譯的快速ORM框架(上)(4)
基礎 類型RecordORMHelper本類型屬於ORM框架的底層模塊。其代碼為public abstract class RecordORMHelper{
C#發現之旅第十二講 基於反射和動態編譯的快速ORM框架(下)(7)
這裡的 KeyProperties,KeyParameterNames和myWhereSQL的值都在生成FillDeleteCommand時已經設 置好了,這
C#發現之旅第十二講 基於反射和動態編譯的快速ORM框架(上)(6)
這個過程很簡單,就是向該列表 的鍵值列表添加實體對象類型,這裡調用了GetBindProperties函數,該函數內部會仔細檢查 實體對象類型是否符合快速OR
C#發現之旅第十二講 基於反射和動態編譯的快速ORM框架(上)(8)
在這個過 程中,GetFIEldIndexs函數提供了一個映射表,而自動生成的代碼就是利用這個映射表將數 據從DataReader復制到DB_Employee
C#發現之旅第十二講 基於反射和動態編譯的快速ORM框架(上)(9)
在這段代碼中, ps是一個事先分析了DB_Employees結構而得出的System.Rection.PropertyInfo數組,包含了 所有附加了Bind
C#發現之旅第十二講 基於反射和動態編譯的快速ORM框架(上)(10)
從這個函數可以看 出,快速ORM框架處理的實體類型必須是一個類型,必須公開,不得是抽象的,而且有公開的 無參數的構造函數。這裡使用了.Net框架的反射技術,首
C#發現之旅第十一講 使用反射和特性構造自己的ORM框架(下)(1)
在InnerReadValue函數中遍歷所有的屬性綁定信息,調用IDataReader.GetValue函數從數據庫中獲得原始數據,然後調用FIEldBind
C#發現之旅第十一講 使用反射和特性構造自己的ORM框架(下)(2)
在這個函數的參數是對象列表和要插入的數據庫表名稱。在函數中首先是遍歷應用程序對象列表,對每一個對象調用GetBindInfo函數獲得綁定信息,然後遍歷所有對象