样本:
public class PrimaryKeyAttribute : Attribute
{ }
public class DbColumnAttribute : Attribute
{
public string Name { get; set; }
public DbColumnAttribute(string name)
{
this.Name = name;
}
}
public class Client
{
[PrimaryKey]
[DbColumn("client_id")]
public int ClientId { get; set; }
[DbColumn("last_name")]
public string LastName { get; set; }
[DbColumn("first_name")]
public string FirstName { get; set; }
[DbColumn("email")]
public string Email { get; set; }
}
代码:
static void Test3()
{
var client = new Client() { ClientId = 2, LastName = "James", FirstName = "jon", Email = "jon@163.com" };
WritePK<Client>(client);
Console.WriteLine();
WriteColumnMappings<Client>(client);
}
public static void WritePK<T>(T item) where T : new()
{
var type = item.GetType();
var queryPts = type.GetProperties();
Console.WriteLine("Finding PK for {0} ...", type.Name);
var pk = queryPts.FirstOrDefault(x =>
x.GetCustomAttributes(false).Any(
a => a.GetType() == typeof(PrimaryKeyAttribute)
)
);
if (pk != null)
{
string msg = "The Primary Key for the {0} class is the {1} property";
Console.WriteLine(msg, type.Name, pk.Name);
}
}
public static void WriteColumnMappings<T>(T item) where T : new()
{
var type = item.GetType();
var queryPts = type.GetProperties();
Console.WriteLine("Finding properties for {0} ...", type.Name);
foreach (var p in queryPts)
{
var attributes = p.GetCustomAttributes(false); //获取属性的特性
var columnMapping = attributes.FirstOrDefault(a =>
a.GetType() == typeof(DbColumnAttribute)
);
if (columnMapping != null)
{
string msg = "the {0} property maps to the {1} database column";
var mapsto = columnMapping as DbColumnAttribute;
Console.WriteLine(msg, p.Name, mapsto.Name);
}
}
}
结果: