/// <summary>
        /// Tipos básicos não possuem transformações especiais.
        /// </summary>
        /// <param name="valueTypes"></param>
        /// <returns></returns>
        private static TypeBase GetTypeFromValue(TypeRef valueTypes)
        {
            if (valueTypes == null)
            {
                return(null);
            }

            switch (valueTypes.AsString().ToLower())
            {
            case "byte[]":
            case "string":
                return(StringType.Create());

            case "int":
                return(IntegerType.Create());

            case "int?":
                return(IntegerType.CreateNullable());

            case "datetime":
                return(DateType.Create());

            case "datetime?":
                return(DateType.CreateNullable());

            case "long":
                return(LongType.Create());

            case "long?":
                return(LongType.CreateNullable());

            case "bool":
                return(BoolType.Create());

            case "bool?":
                return(BoolType.CreateNullable());

            default:
                throw new ArgumentOutOfRangeException("valueTypes", "Não foi possível determinar o tipo da propriedade!");
            }
        }
 /// <summary>
 /// Cria um tipo Referencia, no final irá virar um longType, porém com annotations de lookup.
 /// </summary>
 /// <param name="reference"></param>
 /// <returns></returns>
 private static TypeBase GetTypeFromReference(TypeRef reference)
 {
     return(reference.AsString().ToLower() == "long" ? ReferenceType.Create() : ReferenceType.CreateNullable());
 }