废话 不说直入正题
步骤
- 获取泛型类型
- 获取泛型属性
- 由泛型属性匹配数据库字段
- 获取匹配成功的字段名称
- 获取匹配成功的属性值
- 建立 SQL 语句执行
代码
这里没有使用 SqlParameters ,考虑到参数类型是可变的,于是就使用了 StringBuilder 来创建字符串并完成拼接
private const string INSERT = "INSERT INTO dbo.Alvin";
public static int Create<TEntity>(TEntity entity) {
using (var conn = SqlHelper.Instance.GetConnection())
{
Type type = typeof(TEntity);
PropertyInfo[] infos = type.GetProperties();
StringBuilder sbP = new StringBuilder();
sbP.Append("(");
StringBuilder sbV = new StringBuilder();
sbV.Append(" VALUES(");
foreach (var info in infos)
{
object[] objs = info.GetCustomAttributes(typeof(FieldAttribute), false);
if (objs != null)
{
string s = ((FieldAttribute)objs[0]).Fields;
sbP.Append(s+",");
sbV.Append("'"+type.GetProperty(s).GetValue(entity, null) + "',");
}
}
sbP.Append(")");
sbP.Replace(",)", ")");
sbV.Append(")");
sbV.Replace(",)", ") SELECT SCOPE_IDENTITY()");
string sql = INSERT + sbP.ToString() + sbV.ToString();
int insertedId = SqlHelper.Instance.ExecuteScalar<int>(conn,
sql,
new List<SqlParameter>() { });
return insertedId;
}
}
效果