Я учусь использовать CustomScalar в graphql-dotnet.
В моей таблице есть столбец tinyint, и из того, что я прочитал, я должен использовать байт для этого столбца в C #. После исследования я обнаружил, что мне нужно создать ByteGraphType, но у меня возникают проблемы с этим.
Я получил пример ByteGraphType по этой ссылке https://github.com/graphql-dotnet/graphql-dotnet/issues/458,, поэтому я думаю, что он будет работать.
С помощью этого кода я могу запросить таблицу, однако моя мутация не работает. Я не нашел пример, чтобы продемонстрировать, как мутация будет выглядеть с байтовым столбцом. Я попытался, как указано в моем примере кода, но в этой строке (var avaliacao = context.GetArgument ("avaliacao");) мой аргумент avaliacao.Nota возвращает ноль, и я не уверен, что делать дальше.
Может ли кто-нибудь мне помочь?
Спасибо
ЭТО МОЙ КОД
// * Модель 1017 *
[Column("nota")]
public byte Nota { get; set; }
// * Тип 1020 *
Field<ByteGraphType>("Nota", resolve: context => context.Source.Nota);
// InputType
Field<ByteGraphType>("nota");
// Запрос
Field<ListGraphType<AvaliacaoType>>(
"avaliacoes",
resolve: context => contextServiceLocator.AvaliacaoRepository.All());
// Мутация
Field<AvaliacaoType>(
"createAvaliacao",
arguments: new QueryArguments(
new QueryArgument<NonNullGraphType<AvaliacaoInputType>> { Name = "avaliacao" }
),
resolve: context =>
{
var schema = new Schema();
schema.RegisterValueConverter(new ByteValueConverter());
var avaliacao = context.GetArgument<Avaliacao>("avaliacao");
avaliacao.Nota.AstFromValue(schema, new ByteGraphType());
return contextServiceLocator.AvaliacaoRepository.Add(avaliacao);
});
// ByteGraphType
using GraphQL.Language.AST;
using GraphQL.Types;
using System;
namespace Api.Helpers
{
public class ByteGraphType : ScalarGraphType
{
public ByteGraphType()
{
Name = "Byte";
}
public override object ParseLiteral(IValue value)
{
var byteVal = value as ByteValue;
return byteVal?.Value;
}
public override object ParseValue(object value)
{
if (value == null)
return null;
try
{
var result = Convert.ToByte(value);
return result;
}
catch (FormatException)
{
return null;
}
}
public override object Serialize(object value)
{
return ParseValue(value).ToString();
}
public class ByteValueConverter : IAstFromValueConverter
{
public bool Matches(object value, IGraphType type)
{
return value is byte;
}
public IValue Convert(object value, IGraphType type)
{
return new ByteValue((byte)value);
}
}
public class ByteValue : ValueNode<byte>
{
public ByteValue(byte value)
{
Value = value;
}
protected override bool Equals(ValueNode<byte> node)
{
return Value == node.Value;
}
}
}
}
Мне нужно сохранить запись таблицы, в которой есть столбец tinyint. Если я изменю тип в своем коде на int, я могу изменить его, но не смогу выполнить запрос.