示例#1
0
        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());
        }
示例#2
0
        /// <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());
        }