Skip to content

Commit e587eda

Browse files
authored
Added refinements to the ef core helpers. (#6938)
1 parent 3070cde commit e587eda

15 files changed

+273
-35
lines changed

src/HotChocolate/Data/src/EntityFramework/DbContextKind.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using System;
21
using Microsoft.EntityFrameworkCore;
32
using Microsoft.Extensions.DependencyInjection;
43

src/HotChocolate/Data/src/EntityFramework/DbContextParameterExpressionBuilder.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
1-
using System;
2-
using System.Linq;
31
using System.Linq.Expressions;
42
using System.Reflection;
53
using HotChocolate.Internal;
64
using HotChocolate.Resolvers.Expressions.Parameters;
75
using HotChocolate.Types.Descriptors;
86
using HotChocolate.Types.Descriptors.Definitions;
97
using Microsoft.EntityFrameworkCore;
10-
using Microsoft.Extensions.DependencyInjection;
118
using static HotChocolate.Types.EntityFrameworkObjectFieldDescriptorExtensions;
129
using static HotChocolate.WellKnownMiddleware;
1310

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,20 @@
11
using System.Collections;
2-
using System.Linq;
3-
using System.Threading;
4-
using System.Threading.Tasks;
52
using Microsoft.EntityFrameworkCore;
63

74
namespace HotChocolate.Data;
85

9-
public class EntityFrameworkExecutable<T> : QueryableExecutable<T>
6+
public class EntityFrameworkExecutable<T>(IQueryable<T> queryable) : QueryableExecutable<T>(queryable)
107
{
11-
public EntityFrameworkExecutable(IQueryable<T> queryable) : base(queryable)
12-
{
13-
}
14-
15-
public override async ValueTask<IList> ToListAsync(CancellationToken cancellationToken) =>
16-
await Source.ToListAsync(cancellationToken).ConfigureAwait(false);
8+
public override async ValueTask<IList> ToListAsync(CancellationToken cancellationToken)
9+
=> await Source.ToListAsync(cancellationToken).ConfigureAwait(false);
1710

1811
public override async ValueTask<object?> FirstOrDefaultAsync(
19-
CancellationToken cancellationToken) =>
20-
await Source.FirstOrDefaultAsync(cancellationToken).ConfigureAwait(false);
12+
CancellationToken cancellationToken)
13+
=> await Source.FirstOrDefaultAsync(cancellationToken).ConfigureAwait(false);
2114

2215
public override async ValueTask<object?> SingleOrDefaultAsync(
23-
CancellationToken cancellationToken) =>
24-
await Source.SingleOrDefaultAsync(cancellationToken).ConfigureAwait(false);
16+
CancellationToken cancellationToken)
17+
=> await Source.SingleOrDefaultAsync(cancellationToken).ConfigureAwait(false);
2518

2619
public override string Print() => Source.ToQueryString();
2720
}

src/HotChocolate/Data/src/EntityFramework/Extensions/EntityFrameworkEnumerableExtensions.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using System.Linq;
21
using Microsoft.EntityFrameworkCore;
32

43
namespace HotChocolate.Data;

src/HotChocolate/Data/src/EntityFramework/Extensions/EntityFrameworkObjectFieldDescriptorExtensions.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
using System;
21
using System.Collections;
32
using System.Diagnostics.CodeAnalysis;
4-
using System.Threading.Tasks;
53
using HotChocolate.Data;
64
using HotChocolate.Types.Descriptors.Definitions;
75
using Microsoft.EntityFrameworkCore;

src/HotChocolate/Data/src/EntityFramework/Extensions/ResolverCompilerBuilderExtensions.cs renamed to src/HotChocolate/Data/src/EntityFramework/Extensions/EntityFrameworkRequestExecutorBuilderExtensions.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
using HotChocolate;
12
using HotChocolate.Data;
23
using HotChocolate.Execution.Configuration;
34
using HotChocolate.Internal;
5+
using HotChocolate.Types.Pagination;
46
using Microsoft.EntityFrameworkCore;
57

68
namespace Microsoft.Extensions.DependencyInjection;
@@ -54,5 +56,25 @@ public static IRequestExecutorBuilder AutoRegisterDbContext(
5456
builder.Services.AddSingleton<IParameterExpressionBuilder, InferDbContextParameterExpressionBuilder>();
5557
return builder;
5658
}
59+
60+
/// <summary>
61+
/// Adds resolver compiler mapping for the <see cref="PagingArguments"/> from the EFCore helper lib.
62+
/// </summary>
63+
/// <param name="builder">
64+
/// The <see cref="IRequestExecutorBuilder"/>.
65+
/// </param>
66+
/// <returns>
67+
/// An <see cref="IRequestExecutorBuilder"/> that can be used to configure a schema
68+
/// and its execution.
69+
/// </returns>
70+
public static IRequestExecutorBuilder AddPagingArguments(
71+
this IRequestExecutorBuilder builder)
72+
=> builder.AddParameterExpressionBuilder(
73+
context => MapArguments(
74+
context.GetLocalState<CursorPagingArguments>(
75+
WellKnownContextData.PagingArguments)));
76+
77+
private static PagingArguments MapArguments(CursorPagingArguments arguments)
78+
=> new(arguments.First, arguments.After, arguments.Last, arguments.Before);
5779
}
5880

src/HotChocolate/Data/src/EntityFramework/Extensions/EntityFrameworkResolverContextExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,4 @@ public static TDbContext DbContext<TDbContext>(this IResolverContext context)
3333

3434
return casted;
3535
}
36-
}
36+
}

src/HotChocolate/Data/src/EntityFramework/Extensions/ExecutableMiddleware.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using System.Threading.Tasks;
21
using HotChocolate.Resolvers;
32

43
namespace HotChocolate.Types;

src/HotChocolate/Data/src/EntityFramework/Extensions/PagingResultExtensions.cs

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,36 @@ public static async Task<Connection<T>> ToConnectionAsync<T>(
2222
where T : class
2323
{
2424
var result = await resultPromise;
25-
25+
return CreateConnection(result);
26+
}
27+
28+
/// <summary>
29+
/// Converts a <see cref="Page{T}"/> to a <see cref="Connection{T}"/>.
30+
/// </summary>
31+
/// <param name="resultPromise">
32+
/// The page result.
33+
/// </param>
34+
/// <typeparam name="T">
35+
/// The type of the items in the page.
36+
/// </typeparam>
37+
/// <returns></returns>
38+
public static async ValueTask<Connection<T>> ToConnectionAsync<T>(
39+
this ValueTask<Page<T>> resultPromise)
40+
where T : class
41+
{
42+
var result = await resultPromise;
43+
return CreateConnection(result);
44+
}
45+
46+
private static Connection<T> CreateConnection<T>(Page<T> page) where T : class
47+
{
2648
return new Connection<T>(
27-
result.Items.Select(t => new Edge<T>(t, result.CreateCursor)).ToArray(),
49+
page.Items.Select(t => new Edge<T>(t, page.CreateCursor)).ToArray(),
2850
new ConnectionPageInfo(
29-
result.HasPreviousPage,
30-
result.HasNextPage,
31-
CreateCursor(result.First, result.CreateCursor),
32-
CreateCursor(result.Last, result.CreateCursor)));
51+
page.HasPreviousPage,
52+
page.HasNextPage,
53+
CreateCursor(page.First, page.CreateCursor),
54+
CreateCursor(page.Last, page.CreateCursor)));
3355
}
3456

3557
private static string? CreateCursor<T>(T? item, Func<T, string> createCursor) where T : class

src/HotChocolate/Data/src/EntityFramework/InferDbContextParameterExpressionBuilder.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
using System;
2-
using System.Linq;
31
using System.Linq.Expressions;
42
using System.Reflection;
53
using HotChocolate.Internal;

0 commit comments

Comments
 (0)