public ColumnRetriever TryGet(PropertyInfo propertyInfo)
        {
            var protoContract = propertyInfo.PropertyType.GetCustomAttribute <ProtoContractAttribute>();

            if (protoContract != null)
            {
                var converterType = typeof(ProtoBufferConverter <>).MakeGenericType(propertyInfo.PropertyType);
                var converter     = (TypeConverter)Activator.CreateInstance(converterType);

                var binaryConverter = new BinaryConverter(converter);

                var column = TableColumn.Blob(propertyInfo.Name,
                                              TableColumn.HasSqlNotNull(propertyInfo),
                                              TableColumn.HasSqlPrimaryKey(propertyInfo));

                return(new ColumnRetriever(propertyInfo, column, binaryConverter, false));
            }

            return(null);
        }
        public ColumnRetriever TryGet(PropertyInfo propertyInfo)
        {
            TypeConverter converter = TryGetConverter(propertyInfo);

            if (converter == null)
            {
                return(null);
            }

            bool requiresEscape = true;
            var  column         = TableColumn.VariableText(propertyInfo.Name,
                                                           TableColumn.HasSqlNotNull(propertyInfo),
                                                           TableColumn.HasSqlPrimaryKey(propertyInfo));

            if (converter is BinaryConverter)
            {
                requiresEscape = false;
                column         = TableColumn.Blob(propertyInfo.Name,
                                                  TableColumn.HasSqlNotNull(propertyInfo),
                                                  TableColumn.HasSqlPrimaryKey(propertyInfo));
            }

            return(new ColumnRetriever(propertyInfo, column, converter, requiresEscape));
        }