Пример #1
0
 public static TypeSchema GetSchema(Type type)
 {
     if (!TypeSchemas.ContainsKey(type))
     {
         var fields = type.GetProperties()
                      .Where(p => p.GetCustomAttribute <SchemaIgnoreAttribute>() == null)
                      .Select(p =>
         {
             TypeFieldSchema field = new TypeFieldSchema()
             {
                 Name                 = p.Name,
                 FieldType            = p.MapFieldType(),
                 IsIndex              = p.GetCustomAttribute <IndexAttribute>() != null,
                 IsRequired           = p.GetCustomAttribute <RequiredAttribute>() != null,
                 IsPrimaryKey         = p.GetCustomAttribute <KeyAttribute>() != null,
                 OriginalPropertyType = p.PropertyType,
                 PropertyInfo         = p,
                 IsNullable           = p.PropertyType.IsGenericType && p.PropertyType.GetGenericTypeDefinition() == TypeMapping.type_nullable
             };
             field.IsGeoType = (int)field.FieldType >= (int)FieldTypeEnum.GeometryPoint &&
                               (int)field.FieldType <= (int)FieldTypeEnum.GeometryCollection;
             var stringLength = p.GetCustomAttribute <StringLengthAttribute>();
             if (stringLength != null)
             {
                 field.MaxLength = stringLength.MaximumLength;
                 field.MinLength = stringLength.MinimumLength;
             }
             var forceType = p.GetCustomAttribute <ForceTypeAttribute>();
             if (forceType != null)
             {
                 field.Converter = forceType.Converter;
             }
             else
             {
                 field.Converter = identity;
             }
             return(field);
         });
         TypeSchema schema = new TypeSchema()
         {
             Name = type.Name
         };
         foreach (var field in fields)
         {
             schema.typeFields.Add(field.Name, field);
         }
         TypeSchemas.Add(type, schema);
     }
     return(TypeSchemas[type]);
 }
Пример #2
0
 public static string FieldDeclaration(this TypeFieldSchema field)
 => $"{field.Name} {field.PostgreSQLType}{(field.IsRequired ? " NOT NULL" : "")}{(field.IsPrimaryKey ? " PRIMARY KEY" : "")}";
Пример #3
0
 public static string TableIndex(this TypeFieldSchema field)
 => field.IsGeoType ? $"USING GIST({field.Name})" : $"({field.Name})";