-
Notifications
You must be signed in to change notification settings - Fork 3.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Interception: raw query vs. LINQ #22899
Comments
@Timovzl I don't believe there is currently any way to determine this. We will consider adding it. |
As a workaround, I have intercepted It's a bit fragile, though. Who knows if a scalar-returning raw SQL method will be added in the future. And although I haven't observed other scenarios that lead to |
When detecting the execution of queries using interceptors or diagnostics listeners, is it possible to distinguish between a raw query (
ExecuteSqlRawAsync()
) vs. a regular LINQ one?I'm thinking somewhat analog to
ChangeTracker.Tracked
, whoseEntityTrackedEventArgs
contains aFromQuery
boolean indicating whether it was a query that caused the tracking.I have looked at the events coming through the diagnostics listener. Initially it seemed I could distinguish LINQ queries by the presence of
Microsoft.EntityFrameworkCore.Query.QueryCompilationStarting
orMicrosoft.EntityFrameworkCore.Query.QueryExecutionPlanned
. Alas, these only seem to happen the first time a query is performed.Why is it relevant to detect raw queries? Well, besides variants of
SaveChanges
(which can be easily intercepted), raw queries seem to be all that can have Entity Framework perform write operations (but correct me if I'm wrong). For example, if we want to begin an explicit transaction before any write operations take place, then to be safe we would need to do so before executing a raw query as well.The text was updated successfully, but these errors were encountered: