三、反射和Attribute的聯合使用。
從上面的描述中,我們了解 了反射,了解了Attribute,了解了ORM映射規則的定義。但是剛接觸的朋友估計 還是迷惑,我們怎麼動態獲取這些映射規則呢?聽灑家慢慢道來。
這就 需要使用反射了:
下面的例子,我們由於對Person中的Name,Age以及 SEX都增加了DataFIEldAttribute的描述,這其實就是增加了O(對象)/R(關系 數據庫)的映射規則,下面我們就通過反射的方法來動態獲取此映射規則:
static class Program
{
[STAThread]
static void Main()
{
Person person = new Person();
person.Name = "snoopy";
person.Age = 5;
person.Sex = "male";
PropertyInfo[] infos = person.GetType().GetPropertIEs();
object[] objDataFIEldAttribute = null;
foreach (PropertyInfo info in infos)
{
objDataFieldAttribute = info.GetCustomAttributes(typeof (DataFIEldAttribute), false);
if (objDataFIEldAttribute != null)
{
Console.WriteLine(info.Name + "->數據庫字段:" + ((DataFieldAttribute)objDataFieldAttribute[0]).FIEldName);
}
}
}
}
哈哈,你是不是很想動手了啊?當然了如果你到了這一步就開始動手 的話,那我就很高興了,說明我的描述還算清楚(注:對於已經知道的大牛們此 話無效)。也說明你很有動手的能力。因為接下來的工作就是怎樣根據這種方法 動態地從對象中獲取映射規則,動態構造Insert,Update,Delete等語句。
四、本章總結
本章中我比較詳細地介紹了反射,自定義 Attribute的概念和應用,並且介紹了怎樣在運行時動態獲取O/R Mapping的映射 規則等。當然我這裡的代碼僅僅是舉例,而要真正實現一個ORM,我們還需要考 慮的很多,比如:
1、Person對應於哪張數據庫表?
2、Person中 的PK和FK(如果有的話)怎麼表示?
......
這些問題將在我的下 一篇中進行講解。