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