特性也是一個Class類型,可以有多個構造函數,就像C#的new語句一樣,我們向類型附加特性時可以使用不同的初始化參數來指明使用特性的那個構造函數。我們附加特性時還可以使用“屬性名=屬性值”的方法來直接指明特性的屬性值。該特性中定義了一個TableName屬性,該屬性就是被修飾的對象所映射的數據庫表的名稱。
下面我們舉一個使用特性來進行O/RMapping的例子
用戶類:
Code
[Table("UserInfo")]
public class UserInfo
{
private int userId;
[Column("UserId",DbType.Int32)]
public int UserId
{
get { return userId; }
set { userId = value; }
}
private string userName;
[Column(UserName,DbType.String)]
public string UserName
{
get { return userName; }
set { userName = value; }
}
}
列特性:
Code
[AttributeUsage(AttributeTargets.Property,AllowMultiple=false,Inherited=false)]
public class ColumnAttribute : Attribute
{
public ColumnAttribute()
{
this.columnName = null;
this.dbType = DbType.String;
}
public ColumnAttribute(string columnName)
{
this.columnName = columnName;
}
public ColumnAttribute(string columnName, DbType dbType)
: this(columnName)
{
this.dbType = dbType;
}
private string columnName;
public string ColumnName
{
get { return columnName; }
set { columnName = value; }
}
private DbType dbType;
public DbType DbType
{
get { return dbType; }
set { dbType = value; }
}
}