#hotchocolate
#hotchocolate
Вопрос:
Я просто пытаюсь настроить несколько базовых примеров. Я хочу перейти «сначала к коду», мне нужен компилятор C #, чтобы сказать мне, где я ошибаюсь.
Если я посмотрю на https://chillicream.com/docs/hotchocolate/v10/schema/object-type /
есть пример
type Person {
id: Int!
name: String!
friends: [Person]
}
который, как утверждается, является результатом этого кода на C #
public class PersonType
: ObjectType<Person>
{
protected override void Configure(IObjectTypeDescriptor<Person> descriptor)
{
descriptor.Field(t => t.Name).Type<NonNullType<StringType>>();
descriptor.Field("friends")
.Type<ListType<NonNullType<StringType>>>()
.Resolver(context =>
context.Service<IPersonRepository>().GetFriends(
context.Parent<Person>().Id));
}
}
Хорошо, итак, идентификатор отсутствует, но в документации далее объясняется, что hot chococolate заполнит пробелы (что-то, что я не фанат … но откладываю это в сторону).
тогда у нас есть «name», которое представляет собой строку, и это, по-видимому, соответствует
.Type<NonNullType<StringType>>()
хорошо, это правдоподобно, хотя «друзья» кажутся странными. «Тип» — это
.Type<ListType<NonNullType<StringType>>>()
где я ожидал бы чего-то, что более очевидно сопоставлено с «[Person]»
Является ли документ неправильным? или я неправильно понимаю?
Ответ №1:
Во-первых, да, документы там неправильные. Будет исправлено в этом PR: https://github.com/ChilliCream/hotchocolate/pull/2890
Правильный код будет
public class PersonType
: ObjectType<Person>
{
protected override void Configure(IObjectTypeDescriptor<Person> descriptor)
{
descriptor.Field(t => t.Name).Type<NonNullType<StringType>>();
descriptor.Field("friends")
.Type<ListType<NonNullType<PersonType>>>()
.Resolver(context =>
context.Service<IPersonRepository>().GetFriends(
context.Parent<Person>().Id));
}
}
Хорошо, итак, идентификатор отсутствует, но в документации далее объясняется, что hot chococolate заполнит пробелы (что-то, что я не фанат … но откладываю это в сторону).
Вы можете частично отключить это, если вам это не нравится. HotChocolate всегда будет пытаться вывести тип из .ЧИСТЫЙ, если он не был установлен. Но если вы хотите отключить вывод свойств, вы можете сделать это двумя способами.
- Отключите его глобально
schemaBuilder.ModifyOptions(x => x.DefaultBindingBehavior = BindingBehavior.Explicit)
- Отключите его для каждого типа
public class PersonType
: ObjectType<Person>
{
protected override void Configure(IObjectTypeDescriptor<Person> descriptor)
{
descriptor.BindFieldsExplicitly();
}
}
Комментарии:
1. извините, очень дерзко с моей стороны, я вернулся к этому, но теперь я хочу использовать oracel, что означает, что мне нужен dotnet 3.1, что, я думаю, означает, что мне нужен горячий шоколад 10? Знаете ли вы какой-нибудь хороший прогон для EF и hot chocolate 10 ?… Я действительно борюсь с этим.
2. Я в основном оцениваю это, у меня есть 2 возможных варианта использования, но этот, я просто хочу создать базу данных oracle и предоставить ее, надеюсь, с помощью рефлексивного механизма, поэтому я надеюсь, что почти 0 горячий шоколадный код.
3. HotChocolate 11 также работает с netcoreapp 3.1 🙂
4. ах … когда я использовал 11, я получаю какой-то конфликт версий, который, возможно, я сделаю еще один заход и опубликую ошибку.
5. вы совершенно правы, я обновился до 11 и dotnet 5, и все это работало нормально, tbh, это библиотеки oracle, которые, похоже, вызывают мои проблемы с управлением версиями, похоже, они отстают от последних выпусков EF на 12 месяцев или более