-
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
FindAsync + CancellationToken issue #12012
Comments
The reason behind this is quite simple, the C# compiler binds a call to the This is a bit unfortunate IMHO |
@ilmax This is a common binding issue that we don't have any great solutions for. It's the reason that the overload that takes a cancellation token is not params, but we haven't been able to come up with a great solution for the one that just takes params and no cancellation token. We're unlikely to change the method signatures at this point, but would be interested in hearing if you have any ideas on how it could have been done differently? |
@ajcvickers thanks for the response, I was thinking about how common is to pass multiple values to the We should suggest to the C# team to implement wunderbar betterness :) and ask them to lower the priority of overloads with params modifier... just kidding :) Apart from the aforementioned breaking change solution, no other obvious workaround comes to my mind yet |
@ajcvickers do you remember if we decided explicitly against special-casing when params size is 1 more than expected and the last element is a CancellationToken? |
@divega Yes, we decided against it. I think it was because:
|
Triage: we decided not to change this. |
Am I correct in understanding that there is no way to call FindAsync with a cancellationToken? |
@space-alien You should be able to use something like: FindAsync<IntKey>(new object[] { context, 77 }, CancellationToken.None); |
Can't you just do it like in EF 6, where an overload takes the CancellationToken as the first argument and the params as the second argument? |
Just write an extension method for it:
|
Hi,
working on a side project I found out that calling
Set.FindAsync(key, cancellationToken)
throws this error:Entity type 'IntKey' is defined with a single key property, but 2 values were passed to the 'DbSet.Find' method.
on version 2.1.0-rc1-final
Just removing the
cancellationToken
parameter from theFindAsync
call fixes the problem, so I decided to check if it's reproing on the current dev branch thus I have extended theFindTestBase
class to add a new FindAsync overload because I wasn't able to find an existing test using FindAsync and passing in a cancellationToken.The added overload looks like the following:
FindAsync<TEntity>(DbContext context, object[] keyValues, CancellationToken cancellationToken)
this is the added test:
and the code fails on current dev with the following exception:
This smells like an issue to me and I'm looking into it, just created this issue for letting you know guys.I wasn't able to find any similar issue, if it's a dupe, feel free to close it
The text was updated successfully, but these errors were encountered: