Проблема с поиском объекта с помощью ID при использовании подхода релеC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с поиском объекта с помощью ID при использовании подхода реле

Сообщение Anonymous »

У меня есть проблема с поиском объекта с помощью ID при использовании подхода реле. < /p>
Когда я отправляю этот запрос: < /p>

Код: Выделить всё

query simpleQuery {
getSchemaInfo(Id: "U2NoZW1hSW5mbzq0cC2Zq7keTLzUWk7aem8Y") {
name
}
}
< /code>
Я получаю следующую ошибку: No Serializer зарегистрирован для типа Schemainfo < /p>
Однако, когда я отправляю запрос реле: < /p>
query relayQuery {
node(id: "U2NoZW1hSW5mbzq0cC2Zq7keTLzUWk7aem8Y") {
... on SchemaInfo {
name
}
}
}
< /code>
Все работает нормально < /p>
Я исследовал хоткоколат во время выполнения и обнаружил только одно отличие:
давайте посмотрим на метод Parseliteral < /code> InpintParser 
(Parseliteral Method of InpintParser). В случае SimpleQuery есть идентификатор для поля идентификатора (идентификатор, присутствующий для поля идентификатора в методе Parseliteral), который приводит к методу формата этого форматера (Формат метод форматера). Затем это приводит к вызову метода Parse оптимизированного нодериализатора (метод Parse OptimizedNodeidSerializer). В этом методе ValuesErializer не инициализируется, поскольку eSsupported guidnodeidvalueserializer с idtype , когда параметр вызывается и возвращает false . Это приводит к тому, что Serializermissing выбросит исключение. ESsupported возвращает false , потому что ввод -параметр имеет тип idtype , а не GUID (метод провозглашения GuidnodeidValueSerializer).
В случае. relayQuery, для idfield в Parseliteral Method of InputParser (Parseliteral Method of Parseliteral . InpintParser в случае реле). Из -за этого метод формата не вызывается, и FormatValue возвращает переменную значение (метод FormatValue). Вот почему все работает нормально. Не могли бы вы помочь мне понять, что мне не хватает? Вот как моя программа.private static void AddSchemaTypes(IRequestExecutorBuilder builder)
{
// get entities from assembly
typeof(Entity).Assembly.GetTypes()
.Where(t => t.IsSubclassOf(typeof(Entity)))
.ForEach(t => builder
// add type that will be returned from query
.AddType(typeof(EntityType).MakeGenericType(t))
// add query for this entity
.AddTypeExtension(typeof(QueryType).MakeGenericType(t)));

builder.
ConfigureSchema(b => b.AddRootType(
new ObjectType(d => d.Name(OperationTypeNames.Query)),
OperationType.Query));
}

private static void Main(string[] args)
{
ConfigurationProvider.ConnectionStrings.MustNotBeNull();

DatabaseInitializer.Initialize(ConfigurationProvider.ConnectionStrings.PostgresConnectionString);

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHttpContextAccessor();
builder.Services.AddSingleton(new TransactionScopeHandler(new(ConfigurationProvider.ConnectionStrings.PostgresConnectionString)));
builder.Services.AddGraphQLServer()
.AddTransactionScopeHandler(s => s.GetService().MustNotBeNull())
.AddFiltering()
.AddSorting()
.AddProjections()
.ModifyPagingOptions(opt => opt.IncludeTotalCount = true)
.AddGlobalObjectIdentification()
.AddInMemorySubscriptions();
AddSchemaTypes(builder.Services.AddGraphQL());

var app = builder.Build();
app.UseHttpsRedirection();
app.UseWebSockets();
app.MapGraphQL();
app.RunWithGraphQLCommands(args);
}
< /code>
Вот как EntityType выглядит как:
i < /p>
nternal class EntityType : ObjectType
where T : Entity, new()
{
protected override void Configure(IObjectTypeDescriptor descriptor)
{
descriptor.MustNotBeNull();

descriptor
.Description("description");

descriptor
.ImplementsNode()
.IdField(f => f.Id)
.ResolveNode(Query.GetAsync);

typeof(T).GetProperties().ForEach(property =>
{
var prop = descriptor
.Field(property)
.Description(info.Name);

if (property.Name is nameof(Entity.Id))
{
prop.ID();
}
});
}
}
< /code>
Вот как выглядит QueryType: < /p>
internal class QueryType : ObjectTypeExtension
where T : Entity, new()
{
protected override void Configure(IObjectTypeDescriptor descriptor)
{
descriptor.Name(OperationTypeNames.Query);

descriptor
.Field($"get{typeof(T).Name}")
.Description("some description")
.Type()
.Resolve(async context => await Query.GetAsync(context, default!))
.Argument(nameof(Entity.Id), a => a
.Description("some description")
.Type()
.ID());

descriptor
.Field($"get{typeof(T).Name}Collection")
.Description("some description")
.Type()
.Resolve(Query.Get)
.UseOffsetPaging()
.UseProjection()
.UseFiltering()
.UseSorting();
}
}
< /code>
Вот как объект выглядит как < /p>
public abstract class Entity
{
public Guid Id { get; set; }

public DateTime? Timestamp { get; set; }
}
< /code>
Я попытался изменить общий аргумент в типе метод запроса от idtype на Stringtype, тип uuid, но idtype все еще передается в метод Parseliter. Я ожидаю Ошибки

Подробнее здесь: https://stackoverflow.com/questions/794 ... y-approach
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблема с поиском объекта с помощью ID при использовании подхода реле
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Невозможно настроить образец-корабль-создание V2.php de mondial реле реле
    Anonymous » » в форуме Php
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Невозможно настроить образец-корабль-создание V2.php de mondial реле реле
    Anonymous » » в форуме Php
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • EF Core — невозможно сохранить более 1 объекта с помощью подхода TPT
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Реле + NetCode для GameObjects Синхронизируется в позиции объекта сцены
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»