GraphQL.EntityFrameworkCore.Helpers
1.0.0
See the version list below for details.
dotnet add package GraphQL.EntityFrameworkCore.Helpers --version 1.0.0
NuGet\Install-Package GraphQL.EntityFrameworkCore.Helpers -Version 1.0.0
<PackageReference Include="GraphQL.EntityFrameworkCore.Helpers" Version="1.0.0" />
<PackageVersion Include="GraphQL.EntityFrameworkCore.Helpers" Version="1.0.0" />
<PackageReference Include="GraphQL.EntityFrameworkCore.Helpers" />
paket add GraphQL.EntityFrameworkCore.Helpers --version 1.0.0
#r "nuget: GraphQL.EntityFrameworkCore.Helpers, 1.0.0"
#:package GraphQL.EntityFrameworkCore.Helpers@1.0.0
#addin nuget:?package=GraphQL.EntityFrameworkCore.Helpers&version=1.0.0
#tool nuget:?package=GraphQL.EntityFrameworkCore.Helpers&version=1.0.0
GraphQL Helpers for EF Core
Adds methods to resolve schema fields directly from a DbContext. See sample project for a full setup reference.
Getting Started
You can install the lastest version via NuGet.
> dotnet add package GraphQL.EntityFrameworkCore.Helpers
And edit Startup.cs to register dependencies by calling method below in ConfigureServices(IServiceCollection services). Passing DbContext as type parameter is optional, if it isn't passed here it would need to be passed when defining the schema fields.
public void ConfigureServices(IServiceCollection services)
{
services
.AddGraphQLEntityFrameworkCoreHelpers<AppDbContext>();
}
Defining the Schema
To resolve a root query from the DbContext using the helper methods you first need to call the From method with the DbSet to be included and then call either ResolveCollectionAsync for a list graph or ResolvePropertyAsync for a non list graph.
Field<ListGraphType<HumanGraphType>>()
.Name("Humans")
.From(dbContext.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. Read more about connections here.
Connection<DroidGraphType>()
.Name("Droids")
.From(dbContext.Droids)
.ResolveAsync();
The helper methods can also be used to resolve data loaded properties. Read more about data loaded fields here.
public class HumanGraphType : ObjectGraphType<Human>
{
public HumanGraphType()
{
Field<PlanetGraphType, Planet>()
.Name("HomePlanet")
.Include(x => x.HomePlanet)
.ResolveAsync();
}
}
Applying business logic when resolving fields
With all builders you can apply your own business logic to for instance support authorization scenarios by calling the method Where.
Field<HumanGraphType, Human>()
.Name("BestFriend")
.Argument<NonNullGraphType<IdGraphType>>("HumanId")
.Include(x => x.Friends)
.Where(context =>
{
var humanId = context.GetArgument<int>("HumanId");
return x => x.BestFriendId == humanId;
})
.ResolveAsync();
Validating the context
Similarly you can validate the arguments passed to a context using either Validate or ValidateAsync.
Field<PlanetGraphType, Planet>()
.Name("HomePlanet")
.Include(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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.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.2.0)
- Microsoft.EntityFrameworkCore (>= 3.1.10)
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 | 1,061 | 11/9/2021 |
| 1.1.5 | 470 | 11/8/2021 |
| 1.1.4 | 647 | 9/19/2021 |
| 1.1.3 | 931 | 6/14/2021 |
| 1.1.2 | 547 | 5/27/2021 |
| 1.1.0 | 606 | 3/20/2021 |
| 1.0.1 | 511 | 3/16/2021 |
| 1.0.0 | 532 | 2/28/2021 |
| 0.6.0 | 545 | 1/3/2021 |
| 0.5.2 | 645 | 10/4/2020 |
| 0.5.1 | 690 | 9/13/2020 |
| 0.5.0 | 636 | 9/12/2020 |
| 0.4.0 | 614 | 8/19/2020 |
| 0.3.0 | 661 | 8/11/2020 |
| 0.2.5 | 694 | 5/2/2020 |
| 0.2.4 | 713 | 5/2/2020 |
| 0.2.3 | 754 | 3/29/2020 |
| 0.2.2 | 694 | 3/29/2020 |
| 0.2.1 | 691 | 3/25/2020 |
| 0.2.0 | 655 | 3/25/2020 |
| 0.1.0 | 668 | 3/24/2020 |