GraphQL.EntityFrameworkCore.Helpers
0.5.0
See the version list below for details.
dotnet add package GraphQL.EntityFrameworkCore.Helpers --version 0.5.0
NuGet\Install-Package GraphQL.EntityFrameworkCore.Helpers -Version 0.5.0
<PackageReference Include="GraphQL.EntityFrameworkCore.Helpers" Version="0.5.0" />
paket add GraphQL.EntityFrameworkCore.Helpers --version 0.5.0
#r "nuget: GraphQL.EntityFrameworkCore.Helpers, 0.5.0"
// Install GraphQL.EntityFrameworkCore.Helpers as a Cake Addin #addin nuget:?package=GraphQL.EntityFrameworkCore.Helpers&version=0.5.0 // Install GraphQL.EntityFrameworkCore.Helpers as a Cake Tool #tool nuget:?package=GraphQL.EntityFrameworkCore.Helpers&version=0.5.0
GraphQL Helpers for EF Core
Adds methods to resolve schema fields directly from a DbContext.
Getting Started
dotnet add package GraphQL.EntityFrameworkCore.Helpers
And register GraphTypes to DI:
services
.AddGraphQLEntityFrameworkCoreHelpers();
Defining the Schema
To resolve a root query from a DbContext using the helper methods you first need to define from what DbContext and what DbSet and then call either the ResolveCollectionAsync
method or the ResolvePropertyAsync
method.
Field<ListGraphType<HumanGraphType>>()
.Name("Humans")
.From(dbContext, x => x.Humans)
.ResolveCollectionAsync();
You can also add connections in a similar way. With the connections the client has the option to define what property/properties should be used to order the connection with. Read more about connections here.
Connection<DroidGraphType>()
.Name("Droids")
.From(dbContext, x => x.Droids)
.ResolveAsync(typeof(ConnectionInput));
The helper methods can also be used to resolve data loaded properties. Read more about data loaded fields here.
Field<PlanetGraphType, Planet>()
.Name("HomePlanet")
.Include(dataLoaderAccessor, dbContext, x => x.HomePlanet)
.ResolveAsync();
Applying business logic when resolving fields
With all builders you can apply your own business logic to for instance support multi-tenant solutions using the method Apply
.
Field<PlanetGraphType, Planet>()
.Name("HomePlanet")
.Include(dataLoaderAccessor, dbContext, x => x.HomePlanet)
.Apply((query, context) =>
{
var id = context.GetArgument<int>("id");
return query.Where(x => x.Id == id);
})
.ResolveAsync();
Validating the context
Similarly you can validate the arguments passed to a context using either the Validate
method or the ValidateAsync
method.
Field<PlanetGraphType, Planet>()
.Name("HomePlanet")
.Include(dataLoaderAccessor, dbContext, x => x.HomePlanet)
.ValidateAsync(async context =>
{
var result = new ValidationResult();
var hasAccess = await UserValidator.HasAccessTo(context.GetArgument<int>("id"));
if (hasAccess == false)
{
result.failures.Add(new ValidationFailure("id", "No access"));
}
return result;
}))
.Apply((query, context) => query.Where(x => x.Id == context.GetArgument<int>("id")))
.ResolveAsync();
Filters
All collection fields can be filtered by either applying a string to all filterable properties using Or
or applying specific rules for specific properties. Read more about filters here.
Avoiding Over-Fetching
All helper methods tries to limit the amount data fetched from data store by looking at what was requested, read more about this here.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- GraphQL (>= 3.0.0.2005)
- Microsoft.EntityFrameworkCore (>= 3.1.8)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.1.6 | 889 | 11/9/2021 |
1.1.5 | 317 | 11/8/2021 |
1.1.4 | 506 | 9/19/2021 |
1.1.3 | 793 | 6/14/2021 |
1.1.2 | 392 | 5/27/2021 |
1.1.0 | 452 | 3/20/2021 |
1.0.1 | 357 | 3/16/2021 |
1.0.0 | 370 | 2/28/2021 |
0.6.0 | 378 | 1/3/2021 |
0.5.2 | 477 | 10/4/2020 |
0.5.1 | 518 | 9/13/2020 |
0.5.0 | 475 | 9/12/2020 |
0.4.0 | 455 | 8/19/2020 |
0.3.0 | 500 | 8/11/2020 |
0.2.5 | 527 | 5/2/2020 |
0.2.4 | 537 | 5/2/2020 |
0.2.3 | 581 | 3/29/2020 |
0.2.2 | 514 | 3/29/2020 |
0.2.1 | 511 | 3/25/2020 |
0.2.0 | 491 | 3/25/2020 |
0.1.0 | 506 | 3/24/2020 |