動態編譯 技術中生成的臨時程序集和我們使用開發工具生成的程序集沒有差別,運行速度是一樣的快 。因此動態編譯技術除了能實現靈活的功能外還提供良好的性能。
我們要使用動態編 譯技術,首先得看要實現的功能是否靈活多變,若我們要實現的功能比較簡單,使用靜態編 譯技術就足夠了,那我們就用不著使用動態編譯技術。若功能非常復雜,無法使用代碼生成 器生成代碼來實現它,則也不能使用動態編譯技術。
注意,動態編譯技術會在磁盤中 生成臨時文件,因此.NET框架的安全設置會影響到動態編譯技術的正常運行,而且使用該技 術的程序會生成C#代碼並保存到臨時文件,然後調用.Net框架的C#代碼編譯器生成臨時程序 集,而惡意軟件會在這兩個步驟間隙迅速的修改C#代碼文件並插入惡意代碼,對此動態編譯 技術無法判別。
快速ORM框架整體設計
在這裡我們將以上節課的ORM框架為基 礎,對它進行改造,加入動態編譯技術來打造一個快速ORM框架。首先我們還得使用 BindTableAttribute和BindFIEldAttribute特性來描述實體類型和數據庫的綁定信息。於是 我們上節課使用的演示用的實體類型DB_Employees就原封不動的用到現在。該實體類型的代 碼為
[System.Serializable()]
[BindTable("Employees")]
public class DB_Employees
{
/// <summary>
/// 人員全名
/// </summary>
public string FullName
{
get
{
return this.LastName + this.FirstName ;
}
}
#region 定義數據庫字段變量及屬性 //////////////////////////////////////////
///<summary>
/// 字段值 EmployeeID
///</summary>
private System.Int32 m_EmployeeID = 0 ;
///<summary>
/// 字段值 EmployeeID
///</summary>
[BindFIEld("EmployeeID" , Key = true )]
public System.Int32 EmployeeID
{
get
{
return m_EmployeeID ;
}
set
{
m_EmployeeID = value;
}
}
///<summary>
/// 字段值 LastName
///</summary>
private System.String m_LastName = null ;
///<summary>
/// 字段值 LastName
///</summary>
[BindFIEld("LastName")]
public System.String LastName
{
get
{
return m_LastName ;
}
set
{
m_LastName = value;
}
}
其他 字段……………..
#endregion
}// 數據庫操作類 DB_Employees 定義結束