C# ORM 反射与泛型的交叉应用

来源:互联网 发布:批量处理图片大小软件 编辑:程序博客网 时间:2024/06/05 04:14

废话 不说直入正题

步骤

  1. 获取泛型类型
  2. 获取泛型属性
  3. 由泛型属性匹配数据库字段
  4. 获取匹配成功的字段名称
  5. 获取匹配成功的属性值
  6. 建立 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;            }        }

效果

这里写图片描述

原创粉丝点击