private string GenerateInsertSql() { Type type = typeof(T); string tableName = type.GetCustomAttribute <TableAttribute>().Name; Type ignoreAttribute = typeof(IgnoreInsertAttribute); PropertyInfo[] properties = type.GetProperties(); IEnumerable <PropertyInfo> fields = properties.Where(x => x.GetCustomAttributes().All(y => ignoreAttribute != y.GetType())); IEnumerable <OrmResult.Parameter> parameters = from item in fields select new OrmResult.Parameter { FieldName = item.GetCustomAttribute <ColumnAttribute>().Name, ParameterName = item.Name }; OrmResult orm = new OrmResult { TableName = tableName, Parameters = parameters.ToList() }; string sql = $"INSERT INTO {orm.TableName}({string.Join(", ", orm.Parameters.Select(x => x.FieldName))}) " + $"VALUES(@{string.Join(", @", orm.Parameters.Select(x => x.ParameterName))})"; return(sql); }
private string GenerateWhereClause(object entity) { string tableName = typeof(T).Name; PropertyInfo[] entityProperties = entity.GetType() .GetProperties(); var field = typeof(T).GetProperties() .Where(x => entityProperties.Any(y => y.Name == x.Name)) .Select(x => new { CustomAttribute = x.GetCustomAttribute <ColumnAttribute>().Name, FieldName = x.Name }); IEnumerable <OrmResult.Parameter> parameters = from item in entityProperties select new OrmResult.Parameter { FieldName = field.First(x => x.FieldName == item.Name).CustomAttribute, ParameterName = item.Name }; OrmResult orm = new OrmResult { TableName = tableName, Parameters = parameters.ToList() }; List <string> clause = new List <string>(); for (int i = 0; i < orm.Parameters.Count; i++) { bool isArray = entityProperties.ElementAt(i).PropertyType.IsArray; if (isArray) { clause.Add($"{orm.Parameters[i].FieldName} = ANY(@{orm.Parameters[i].ParameterName} )"); } else { clause.Add($"{orm.Parameters[i].FieldName} = @{orm.Parameters[i].ParameterName} "); } } string result = $"WHERE {string.Join(" AND ", clause)}"; return(result); }
protected override OrmResult MappedCheckExists <T>(T objModel) { OrmResult result = null; if (objModel != null) { StringBuilder sqlText = new StringBuilder(); Dictionary <string, DbParameter> parameters = new Dictionary <string, DbParameter>(); OrmModel objMappedModel = this.GetMappedModel <T>(); /**/ sqlText.Append("select count(*) from `{Table}` where 1 = 1 {Where}"); sqlText.Replace("{Table}", objMappedModel.Table.TableName); /**/ StringBuilder whereText = new StringBuilder(); string parameterName = null; object parameterValue = null; MySqlParameter parameter = null; foreach (KeyValuePair <string, OrmColumnAttribute> column in objMappedModel.Columns) { if (column.Value.IsUnique) { parameterName = this.DbCharacter + column.Value.ColumName; parameterValue = column.Value.MappedPropertyInfo.GetValue(objModel, null); parameter = new MySqlParameter(parameterName, column.Value.MySqlDataType); parameter.Value = parameterValue; parameters.Add(parameterName, parameter); /**/ whereText.Append(" and " + column.Value.ColumName + " = " + parameterName); } } sqlText.Replace("{Where}", whereText.ToString()); result = new OrmResult(sqlText.ToString(), parameters); } return(result); } protected override OrmResult MappedInsert <T>(T objModel) { OrmResult result = null; if (objModel != null) { StringBuilder sqlText = new StringBuilder(); Dictionary <string, DbParameter> parameters = new Dictionary <string, DbParameter>(); OrmModel objMappedModel = this.GetMappedModel <T>(); /**/ sqlText.Append("insert into `{Table}`({Column}) values({Value})"); sqlText.Replace("{Table}", objMappedModel.Table.TableName); /**/ StringBuilder columnText = new StringBuilder(); StringBuilder valueText = new StringBuilder(); string parameterName = null; object parameterValue = null; MySqlParameter parameter = null; foreach (KeyValuePair <string, OrmColumnAttribute> column in objMappedModel.Columns) { if (!column.Value.IsAutoincrement && column.Value.IsInsert) { parameterName = this.DbCharacter + column.Value.ColumName; parameterValue = column.Value.MappedPropertyInfo.GetValue(objModel, null); if (parameterValue != null || (!column.Value.IsNullable)) { parameter = new MySqlParameter(parameterName, column.Value.MySqlDataType); parameter.Value = parameterValue; parameters.Add(parameterName, parameter); /**/ columnText.Append(column.Value.ColumName + ", "); valueText.Append(parameterName + ", "); } } } columnText.Remove(columnText.Length - 2, 2); valueText.Remove(valueText.Length - 2, 2); sqlText.Replace("{Column}", columnText.ToString()); sqlText.Replace("{Value}", valueText.ToString()); result = new OrmResult(sqlText.ToString(), parameters); }