C# ORM 反射與泛型的交叉應用 - 獲取泛型與數據庫對應字段的值並存入數據庫

廢話 不說直入正題

步驟

  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;
            }
        }

效果

這裏寫圖片描述

發佈了62 篇原創文章 · 獲贊 35 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章