FindAsync 仅在主键中搜索还是可以创建复杂的查询?

FindAsync search only in primary key or can create complicated queries?

我在 ASP.NET Core Identity 代码 there:

中看到了这行代码
/// <summary>
/// Find a user token if it exists.
/// </summary>
/// <param name="user">The token owner.</param>
/// <param name="loginProvider">The login provider for the token.</param>
/// <param name="name">The name of the token.</param>
/// <param name="cancellationToken">The <see cref="CancellationToken"/> used to propagate notifications that the operation should be canceled.</param>
/// <returns>The user token if it exists.</returns>
protected override Task<TUserToken> FindTokenAsync(TUser user, string loginProvider, string name, CancellationToken cancellationToken)
                => UserTokens.FindAsync(new object[] { user.Id, loginProvider, name }, cancellationToken).AsTask();

我想知道这行代码是做什么的?它只是搜索具有给定值 user.IdloginProvidername[= 的主键的 IdentityToken 24=] 这可能是 FindAsync 文档的结果,但在应用程序上下文中没有意义?或者它正在搜索具有给定值字段的标记,例如生成此查询:

select * 
from tokens 
where userId = id and loginProvider = "lp" and name = "name"

我无法想象为什么我们必须在 userId 列中搜索 loginProvider 和名称。如果有任何合理的目标,请告诉我。

FindAsync returns 只有一个对象,它只搜索一个结果。当使用带有对象数组的简单单列主键在 table 上调用时,它会抛出 Argument 异常并显示以下消息:

Entity type 'Person' is defined with a single key property, but 2 values were passed to the 'DbSet.Find' method.

当主键与多列组合时,您可以调用带有数组参数的 FindAsync 方法。

另外,我查看了AspIdentity数据库,发现AspNetUserTokens的主键定义了多个列: