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" />
paket add GraphQL.EntityFrameworkCore.Helpers --version 1.0.0
#r "nuget: GraphQL.EntityFrameworkCore.Helpers, 1.0.0"
// Install GraphQL.EntityFrameworkCore.Helpers as a Cake Addin #addin nuget:?package=GraphQL.EntityFrameworkCore.Helpers&version=1.0.0 // Install GraphQL.EntityFrameworkCore.Helpers as a Cake Tool #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. |
.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 | 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 |