C 根據反射和特性實現ORM對映例項分析

2022-10-07 06:45:07 字數 2133 閱讀 1243

(一)關於反射

什麼是反射?

反射就是在執行時,動態獲取物件資訊的方法。比如:執行時獲得物件有哪些屬性,方法,委託等。

反射的作用?

能夠實現執行時,動態呼叫物件的方法,以及動態設定、獲取屬性值等。

反射的示例:

using system;

using system.reflection;

namespace cs_test

set

}private int sage;

public int sage

set

}} class test_attribute}}

(二)關於特性

什麼是 attribute?

它是對執行時的物件或物件的屬性、方法、委託等進行描述的類。

attribute 的作用?

用於在執行時,描述你的**或者影響你的程式的行為。

注意:既然attribute 是類,那麼它的定義與定義類一樣。

唯一不同的就是,自定義attribute 類必須繼承於system.attribute 空間。

特性的示例:

//描述資料庫欄位的 attribute

public class datafieldattribute : attribute

// 資料庫欄位名

private string _fieldname;

public string fieldname

set

}// 資料庫字段型別

private string _fieldtype;

public string fieldtype

set }}

通過自定義attribute,我們定義了類屬性和資料庫欄位的一一對應關係,於是對mystudent 類的name、age 屬性都加上attribute 的描述,指定他們對應的資料庫欄位名以及型別。

**更改如下:

public class mystudent

set

}private int _age;

[datafieldattribute("sage", "int")]

public int age

set }}

(三)orm 對映規則的定義

給實體類增加datafieldattribute 的描述,其實就是增加了o(物件)/ r(關係數程式設計客棧據庫)的對映規則。

下面我們就通過反射的方法實現:在執行時動態獲取o/r  mapping 的對映規則:

static void main(string args)

}}顯示結果:

實體類的屬性名:name -> 資料庫欄位名:sname

實體類的屬性名:age -> 資料庫欄位名:sage

接下來的工作就是:怎樣根據這種方法動態地從物件中獲取對映規則,然後動態構造insert、update、delete 等 sql 語句。這就是實現自己的orm 的原理。

這裡的**僅僅是舉例,而要真正實現乙個orm,我們還需要考慮的很多,比如:

1、實體類對應於哪張資料庫表?

2、資料庫表中的 pk  和 fk(如果有的話)怎麼表示?

完整**如下:

using system;

using system.reflection;

namespace cs_test

set

}private int _age;

[datafieldattribute("sage", "int")]

public int age

set

}} //描述資料庫欄位的 attribute

public class datafieldattribute : attribute

// 資料庫欄位名

private string _fieldname;

public string fieldname

set

}// 資料庫字段型別

private string _fieldtype;

public string fieldtype

set

}} class test_attribute}}

}}本文標題: c#根據反射和特性實現orm對映例項分析

本文位址:

反射簡介 C 特性和反射

net編譯器的任務之一就是為所有定義和引用的型別生成元資料描述。除了程式集中標準的元資料外,net平台還支援特定 attribute 把更多的元資料嵌入到程式集中。net特性擴充套件了抽象的system.attribute基類,net中有很多預定義的特性,例如 dllimport obsolete ...

C 利用反射 特性實現簡單的實體對映資料庫操作類

附上源 1 using system 2using system.collections.generic 3using system.data 4using system.linq 5using system.text 6using system.threading.tasks 78 namespa...

C 實現的ORM對映工具類介紹 三

dbmanager類 class dbmanager include dbmanager.hpp dbmanager dbmanager pdbmanager null dbmanager dbmanager for int i 0 iclassnamevector.size j if pmodel...