Есть ли способ разрешить тип GraphQl путем ссылки на другой тип? - PullRequest
1 голос
/ 02 мая 2020

Я использую библиотеку Graphql. Net для создания API GraphQl. Ниже приведен пример предметной области того, что у нас есть в данный момент, где в области есть список идентификаторов точек выборки:

public class AreaRoot {
   public String Id { get; set; }
   public List<String > SamplingPointIds { get; set; }
}

public class SamplingPointRoot {
   public String Id { get; set; }
   public String Description { get; set; }
}

И типы определены следующим образом:

public class AreaType : ObjectGraphType<AreaRoot>
{
    public AreaType()
    {
        Name = "Area";
        Field(x => x.Id, type: typeof(IdGraphType));
        Field(x => x.SamplingPointIds, type: typeof(ListGraphType<StringGraphType>));
    }
}

public class SamplingPointType : ObjectGraphType<SamplingPointRoot>
{
    public SamplingPointType()
    {
        Name = "SamplingPoint";
        Field(x => x.Id, type: typeof(IdGraphType));
        Field(x => x.description, type: typeof(StringGraphType));
    }
}

Есть ли способ получить все из точки выборки без изменения классов домена? в конференции есть пример GraphQL против API традиционного отдыха , через 25:41 мин, но этот пример в java, и мы не могли сделать то же самое с помощью graphQl. net.

Следующий пример иллюстрирует тип запроса, который мы хотим сделать:

query GetAreas(){
    areas(){
        Id
        samplingPoints{
           Id
           description
        }
    }
}

Итак, вопрос: есть ли способ сделать это, как в видео выше, когда мы передаем samplingPoints и разрешите его, получая точки сэмплирования для этой области (в некотором запросе)?

1 Ответ

0 голосов
/ 05 мая 2020

Вопрос решен на github . Для тех, кто пытается сделать то же самое, на самом деле это действительно просто, нам просто нужно иметь определитель внутри AreaType, подобный этому:

public class AreaType : ObjectGraphType<AreaRoot>
{
    public AreaType(IRepository repository)
    {
        Name = "Area";
        Field(x => x.Id, type: typeof(IdGraphType));
        Field<ListGraphType<SamplingPointType>>("areaSamplingPoints",
           resolve: context =>
        {
           return repository.GetAllByAreaId(context.Source?.Id);
        });
    }
}

обратите внимание на context.Source?.Id, используемый для доступа к идентификатору области ...

А также, если вы пытаетесь получить доступ к аргументам контекста верхнего уровня, вы не можете, как указано здесь , но вместо этого вы можете получить доступ к переменным, переданным в запрос , не самый лучший, но не самый плохой, поэтому используйте: context.Variables.ValueFor("variableName")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...