您的位置:首页 > 数据库

C# ORM 反射与泛型的交叉应用 - 获取泛型与数据库对应字段的值并存入数据库

2017-07-19 12:52 561 查看

废话 不说直入正题

步骤

获取泛型类型

获取泛型属性

由泛型属性匹配数据库字段

获取匹配成功的字段名称

获取匹配成功的属性值

建立 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+",");
//Console.WriteLine("字段名称:{0}", ((FieldAttribute)objs[0]).Fields);
//通过type 获取对应的字段,然后通过 getvalue 获取到值
// Console.WriteLine("字段值:{0}", type.GetProperty(s).GetValue(entity, null));
//注意这里必须要加上 '' 否则存入的时候会在datatime的转换上出现问题导致崩溃
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();
//Console.WriteLine("SQL 语句:{0}", sql);
//插入
int insertedId = SqlHelper.Instance.ExecuteScalar<int>(conn,
sql,
new List<SqlParameter>() { });
return insertedId;
}
}


效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐