public void Save(T data, bool insertWhenNotExists) { var insertColumnList = new List <string>(); var insertValueList = new List <string>(); var updateList = new List <string>(); var parameters = new Dictionary <string, object>(); foreach (var property in _columnInfo) { insertColumnList.Add(property.Value); insertValueList.Add(string.Format("@{0}", property.Value)); updateList.Add(string.Format("{0}=@{0}", property.Value)); parameters.Add(string.Format("@{0}", property.Value), typeof(T).GetProperty(property.Key).GetGetMethod().Invoke(data, null)); } var sqlCommandText = insertWhenNotExists ? string.Format(_saveSqlCommand, _tableName, string.Join(",", insertColumnList.ToArray()), string.Join(",", insertValueList.ToArray()), string.Join(",", updateList.ToArray())) : string.Format(_updateSqlCommand, _tableName, string.Join(",", updateList.ToArray())); _sqlHelper.ExcuteNonQueryInTransaction(sqlCommandText, parameters); }