程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#基礎系列:實現自己的ORM(反射以及Attribute在ORM中的應用)(4)

C#基礎系列:實現自己的ORM(反射以及Attribute在ORM中的應用)(4)

編輯:關於C語言

三、反射和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(如果有的話)怎麼表示?

......

這些問題將在我的下 一篇中進行講解。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved