廢話 不說直入正題
步驟
- 獲取泛型類型
- 獲取泛型屬性
- 由泛型屬性匹配數據庫字段
- 獲取匹配成功的字段名稱
- 獲取匹配成功的屬性值
- 建立 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;
}
}
效果