I need a worker to do multitenant work on the database - so in the DoWork function I would like to use the DB context.
The worker class lives the Core project.
The reason is I need to to linq queries involving datetimes and these don't work through reposities.
my linq looks like this:
allShifts = allShifts
.Where(s =>
TimeSpan.Compare(s.Deadline.ToUniversalTime().AddHours(s.NotifyHoursBeforeDeadline * -1).TimeOfDay, _notificationSweep.TimeOfDay) < 0 // The deadline is after now
&&
_notificationSweep.TimeOfDay.TotalMinutes - s.Deadline.ToUniversalTime().AddHours(s.NotifyHoursBeforeDeadline * -1).TimeOfDay.TotalMinutes < NotificationWindowInMinutes + 5 // it's within 30 minutes, adding 5 minutes to account for sending time
)
.ToList();
If I can get to the workDbContext, I should be able to use some of the dbFunctions specified here: https://docs.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.sqlserverdbfunctionsextensions?view=efcore-3.1
What this is trying to do:
I have a datetime object I only need the timeofday - so I have now which is the notificationsweep variable.
I need to get time of day values that are within 30 minutes of the job running.
My hope is geting the DB context would allow better querying flexibilty.
4 Answer(s)
-
0
Hi,
You can inject
IDbContextProvider
and use it to get the DbContext. -
0
For a domain service? It doesn't have a reference to my DbContext which is in Framework core.
-
0
You may consider moving the worker to the EF layer. Or abstracting it as an interface in the Domain and implementing it in the EF layer.
-
0
Thank you - this worked.
I had a few issues because I forgot to inherit from ISingletonDependency - but as soon as I did that, the job started correctly.