Closed geraldmaale closed 1 month ago
I think that I have bumped into the same error:
The specified key `ConferencePlanner.GraphQL.Data.ApplicationDbContext` does not exist on `context.ScopedContextData`
... and also wonder what is the right solution. In the session 6 example code the DI of ApplicationDbContext
is handled differently in the different <Name>Type.cs
-files. For example in the SpeakerType.cs
it does add the ApplicationDbContext
in the chain of middlewares by doing what you do @geraldmaale, by adding:
.UseDbContext<ApplicationDbContext>()
... that seems to work fine. I can trigger the same problem you have in session 6 by running the query:
mutation AddSession {
addSession(input: {
speakerIds: ["U3BlYWtlcgppMw=="]
title: "Session #1"
}) {
session {
speakers {
name
id
}
}
}
}
The session part will trigger the code in SessionType.cs:
descriptor
.Field(t => t.SessionSpeakers)
.ResolveWith<SessionResolvers>(t => t.GetSpeakersAsync(default!, default!, default!, default))
.Name("speakers");
and in that file [UseApplicationDbContext]
is used in the SessionResolvers
private class however that does not seem to work. The only way I get it to work is with the solution of adding .UseDbContext<ApplicationDbContext>()
on each descriptor that use the SessionResolvers
-functions (that needs ApplicationDbContext
). This is the solution used in the same example code for SpeakerType.cs
.
I am more then happy to aid with a PR if the solution is correct and .UseDbContext<ApplicationDbContext>()
should be used.
Would be good for me at least to understand why adding [UseApplicationDbContext]
do not work, such as used on the public async Task<IEnumerable<Speaker>> GetSpeakersAsync
in the SessionType.cs
. I thought that that would be the same result as by adding .UseDbContext<ApplicationDbContext>()
explicitly.
Thanks!
It looks like adding UseDbContext
is the expected solution as that's what is done in the complete
code
I think we could start with fixing the session code which would be especially helpful for new devs that will try the workshop. @macke800 Are you still available to do a PR for that?
I'm also curious why [UseApplicationDbContext]
doesn't work. @michaelstaib Would you be able to shed some light on @macke800's question?
Would be good for me at least to understand why adding
[UseApplicationDbContext]
do not work, such as used on thepublic async Task<IEnumerable<Speaker>> GetSpeakersAsync
in theSessionType.cs
. I thought that that would be the same result as by adding.UseDbContext<ApplicationDbContext>()
explicitly.
@gojanpaolo, absolutely, more then happy if I can help. It may take a day or two.
Pull request created: https://github.com/ChilliCream/graphql-workshop/pull/43 Not sure how to ask for review, but please let me know if something is not right. I have compiled each changed project and all compiles and seems to work.
Fixed in #43.
I have been battling with the Track queries with pagination in Session 6 for several hours without success. Later I got to realize that the Field descriptor for Sessions needed to be provided with "UseDbContext" middleware in the TrackType.
However the tutorials lack that middleware, is it an error or I was not doing it right.