反射學習系列2 特性(Attribute)

2022-03-14 17:42:48 字數 2086 閱讀 2717

先看乙個簡單的例子

[table(name="dbo.[user]")]

public partial class user

public

tableattribute(

string

tablename)

//////

對映的表名(表的全名:模式名.表名)

///public

string

tablename

get}

}特性也是乙個class型別,可以有多個建構函式,就像c#的new語句一樣,我們向型別附加特性時可以使用不同的初始化引數來指明使用特性的那個建構函式。我們附加特性時還可以使用「屬性名=屬性值」的方法來直接指明特性的屬性值。該特性中定義了乙個tablename屬性,該屬性就是被修飾的物件所對映的資料庫表的名稱。

使用者類:

user類

[table(

"user")]

public

class

user

[colum(

"username

", dbtype 

=dbtype.string)]

public

string

username 

}表特性

表特性[attributeusageattribute(attributetargets.class, inherited 

=false

, allowmultiple 

=false

)]public

class

tableattribute : attribute

public

tableattribute(

string

tablename)

//////

對映的表名(表的全名:模式名.表名)

///public

string

tablename

get}

}列特性:

列特性[attributeusageattribute(attributetargets.property, inherited 

=false

, allowmultiple 

=false

)]public

class

columattribute : attribute

public

columattribute(

string

columname)

: this

()public

columattribute(

string

columname, dbtype dbtype)

: this

(columname)

//列名

public

virtual

string

columname

get}

//描述一些特殊的資料庫型別

public

dbtype dbtype

set}

}ormhelp

public

class

ormhelp}}

//拼插入操作字串

foreach

(var item in"

,");}

sqlstr.remove(sqlstr.length-1

, 1") values('");

foreach

(var item in"

','");}

sqlstr.remove(sqlstr.length -2

, 2")

");console.writeline(sqlstr.tostring());}}

sqlstr中的內容為insert into user(userid,username) values('1','lfm')

前端使用**:

前端**

static

void

main(

string

args)

;o.insert(u);

}

反射學習系列2 特性(Attribute)

反射學習系列目錄 反射學習系列1 反射入門 反射學習系列2 特性 attribute 反射學習系列3 反射例項應用 作者 先看乙個簡單的例子 table name dbo.user public partial class user public tableattribute string tabl...

反射學習系列

您清晰的元件化目標是否因在庫間共享過多型別資訊而落空?或許您需要高效的強型別化資料儲存,但如果每次物件模型發展後都需要更新您的資料庫架構,那會耗費很大成本,所以您更願意在執行時推斷出其型別架構嗎?您需要交付能接受任意使用者物件的元件,並以某種智慧型化的方式處理它們嗎?您希望庫的調方者能以程式設計方式...

反射學習系列1 反射入門

反射學習系列目錄 反射學習系列1 反射入門 反射學習系列2 特性 attribute 反射學習系列3 反射例項應用 作者 reflection,中文翻譯為反射。這是.net中獲取執行時型別資訊的方式,net的應用程式由幾個部分 程式集 assembly 模組 module 型別 class 組成,而...