利用反射我们可以简化我们的编程,如进行Sql语句的自动生成。下面来记录下之前使用的一些功能
自定义特性我们定义实体当中要使用
表名特性
[AttributeUsage(AttributeTargets.Class,Inherited=true)]
public class TableNameAttribute:Attribute
{
public string TableName { get; set; }
public TableNameAttribute(string name)
{
TableName = name;
}
}
主键特性
[AttributeUsage(AttributeTargets.Property,Inherited=true)]
public class PrimaryAttribute:Attribute
{
public PrimaryAttribute()
{
}
}
我们定义一个实体,使用到之前定义的特性表名和主键
[TableName("ds1.emp")]
public class emp
{
[Primary]
public string empid { get; set; }
[Primary]
public string empname { get; set; }
public DateTime adddate { get; set; }
}
利用反射获取一些信息
/// <summary>
/// 获取Entity字段名
/// </summary>
/// <returns></returns>
public static List<string> GetDTOField<T>()
{
var fields = typeof(T).GetProperties();
return fields.Select(i => i.Name).ToList();
}
/// <summary>
/// 获取Entity的表名
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static string GetTableName<T>()
{
var tablename = typeof(T).GetCustomAttributes(typeof(TableNameAttribute), true);
return ((TableNameAttribute)tablename[0]).TableName;
}
/// <summary>
/// 获取Entity的主键列表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static List<string> GetPrimayKeylist<T>()
{
var result = new List<string>();
var pri = typeof(T).GetProperties();
foreach (var i in pri)
{
var pris = i.GetCustomAttributes(typeof(PrimaryAttribute), true);
if (pris.Any())
{
result.Add(i.Name);
}
}
return result;
}
/// <summary>
/// 获取字段对应的类型 以字典形式返回
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Dictionary<string, string> GetFieldType<T>()
{
var data = new Dictionary<string, string>();
var pri = typeof(T).GetProperties();
foreach (var i in pri)
{
data.Add(i.Name, i.PropertyType.ToString());
}
return data;
}
/// <summary>
/// 获取字段对应的值 以字典形式返回
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static Dictionary<string, object> GetKeyValue(object obj)
{
var data = new Dictionary<string, object>();
foreach (var i in obj.GetType().GetProperties())
{
var value = obj.GetType().GetProperty(i.Name).GetValue(obj, null);
data.Add(i.Name, value);
}
return data;
}
这些基本的其实已经可以为我们组成简单的Sql语句了