C#根据反射生成sql语句(Update语句)
今天有人问我Update语句怎么搞,想了一下大致思路就是用特性去标识一下,主键,然后再去用反射的方式拼sql语句。
在C#中,我们可以使用特性(Attributes)来标识一个类的属性作为该类的主键(Primary Key)。如何定义一个自定义特性来标识主键,并在实体类中使用该特性。
首先,定义一个自定义特性来标识主键:
一、主键特性
[AttributeUsage(AttributeTargets.Class)]
public class PrimaryKeyAttribute : Attribute
{
private PrimaryKeyAttribute()
{
}
private string _name;
///
/// 构造方法
///
///
public PrimaryKeyAttribute(string name)
{
_name = name;
}
///
/// 主键名称
///
public string Name
{
get { return _name; }
}
}
把这个特性加到实体类的上方,并指定主键名称,就可以了,示例:
[PrimaryKey("code")]
///
/// 用户表
///
public class user
{
///
/// 编号
///
public int id { get; set; }
///
/// 用户ID
///
public int code { get; set; }
///
/// 用户名
///
public string name { get; set; }
///
/// 密码 md5(md5()+创建时间)
///
public string password { get; set; }
///
/// 手机号
///
public string mobile { get; set; }
///
/// 1=男 2=女 3=未知
///
public string sex { get; set; }
///
/// 生日
///
public DateTime? birthday { get; set; }
///
/// 头像
///
public string avatar { get; set; }
///
/// 昵称
///
public string nick { get; set; }
///
/// 余额
///
public decimal? balance { get; set; }
///
/// 积分
///
public int? point { get; set; }
///
/// 用户等级
///
public string grade { get; set; }
///
/// 创建时间
///
public DateTime create_time { get; set; }
///
/// 更新时间
///
public DateTime? update_time { get; set; }
///
/// 1 = 正常 2 = 停用
///
public string status { get; set; }
///
/// 推荐人
///
public int? pid { get; set; }
///
/// 删除标志 有数据就是删除
///
public string isdel { get; set; }
///
/// 备注
///
public string remarks { get; set; }
}