Upgrading from 3.x to 4.x
EntityGraphQL aims to respect Semantic Versioning, meaning version 4.0.0 contains breaking changes. Below highlights those changes and the impact to those coming from version 3.x.
You can see the full changelog which includes other changes and bug fixes as well as links back to GitHub issues/MRs with more information here on GitHub.
Renamed Classes
MutationArgumentsAttribute renamed to GraphQLArgumentsAttribute and is used with subscriptions or mutation method arguments. This should be a simple find and replace.
AddMutationsFrom Argument Changes
AddMutationsFrom and friends now take an optional SchemaBuilderMethodOptions object to configure how mutations are built, following the SchemaBuilderOptions used elsewhere. The previous overrides have been removed. Important defaults for SchemaBuilderMethodOptions:
bool AutoCreateInputTypes = false; // Any input types seen will be added to the schema if true
bool AddNonAttributedMethods = false; // GraphQLMutationAttributes are still required by default
bool AutoCreateNewComplexTypes = true; // Return types of mutations will be added to the schema
DateTimeOffset in Default Schema
When you create a SchemaProvider<T>, the DateTimeOffset Dotnet type is now added as a default scalar type. It is a very common used type in EF contexts and trips up new users. If you previously were adding it as a scalar type you no longer need to. Or if you'd like to add it differently (like map it to Date) you can
services.AddGraphQLSchema<DemoContext>(options =>
{
options.PreBuildSchemaFromContext = (schema) =>
{
schema.RemoveType<DateTimeOffset>();
// add it how you want
};
});
SchemaBuilderOptions.IgnoreTypes Change
SchemaBuilderOptions.IgnoreTypes Now uses Type instead of string. It is a HashSet<Type> now to avoid confusion of which name to use (full name space or not).
Field Extensions
ProcessExpressionSelection used in Field Extensions now takes Dictionary<IFieldKey, CompiledField> for the selectionExpressions parameter. IFieldKey is the field name and the schema type the field belongs too. Helps when dealing with inline fragments/union types where we may have multiple fields with the same name from different types.