public static string GenerateTypeMigrations(ReflectionEntityCache typeCache, IEnumerable <InformationSchemaColumns> columns) { StringBuilder query = new StringBuilder(); foreach (InformationSchemaColumns column in columns) { ReflectionPropertyCache property = typeCache.GetProperty(column.Name); string valType = property.Type.ToStringDb(); if (!column.TypeString.Equals(Regex.Replace(valType, @"(\(.*\))", string.Empty))) { query.AppendLine($"ALTER TABLE {typeCache.Name} ALTER COLUMN {property.Name} {valType};"); } } return(query.ToString()); }
/// <summary> /// Constructor /// </summary> public SqlGenerator(SqlGeneratorConfig sqlGeneratorConfig) { Config = sqlGeneratorConfig; var entityType = typeof(TEntity); if (TableNameCache.ContainsKey(entityType)) { TableName = TableNameCache[entityType]; } else { var entityTypeInfo = entityType.GetTypeInfo(); var tableAttribute = entityTypeInfo.GetCustomAttribute <TableAttribute>(); TableName = Config.StartQuotationMark + (tableAttribute != null ? tableAttribute.Name : entityTypeInfo.Name) + Config.EndQuotationMark; TableNameCache.TryAdd(entityType, TableName); } PropertyInfo[] props; if (ReflectionPropertyCache.ContainsKey(entityType)) { props = ReflectionPropertyCache[entityType]; } else { props = entityType.GetProperties().Where(p => p.CanWrite && (p.PropertyType.IsValueType || p.PropertyType == typeof(string) || p.PropertyType == typeof(byte[]))).ToArray(); ReflectionPropertyCache.TryAdd(entityType, props); } // Filter the non stored properties SqlProperties = props.Where(p => !p.GetCustomAttributes <IgnoreAttribute>().Any()).ToArray(); // Filter key properties KeySqlProperties = props.Where(p => p.GetCustomAttributes <KeyAttribute>().Any()).ToArray(); // Use identity as key pattern IdentitySqlProperty = props.FirstOrDefault(p => p.GetCustomAttributes <AutoIncrementKeyAttribute>().Any()); }