我在上使用LINQ查询DbSet<T>
:
await _dbContext.Users.AnyAsync(u => u.Name == name);
但是,编译器输出以下错误:
Error CS0121: The call is ambiguous between the following methods or properties:
'System.Linq.AsyncEnumerable.AnyAsync<TSource>(System.Collections.Generic.IAsyncEnumerable<TSource>, System.Func<TSource, bool>)' and
'Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.AnyAsync<TSource>(System.Linq.IQueryable<TSource>, System.Linq.Expressions.Expression<System.Func<TSource, bool>>)'
其他LINQ扩展方法(如)也会发生类似的问题.Where()
。
我正在使用EF.Core 3.1并已System.Linq.Async
安装软件包。如何解决此问题?
所描述的问题是由System.Linq.Async
与DbSet<TEntity>
类一起使用软件包引起的。
由于同时DbSet<TEntity>
实现IQueryable<TEntity>
和IAsyncEnumerable<TEntity>
,因此导入名称空间System.Linq
并Microsoft.EntityFrameworkCore
导致冲突的扩展方法的定义。不幸的是,避免导入其中之一通常是不可行的。
此行为从EF.Core 3.0开始出现,并将在本期中进行讨论。
为了解决这个问题,EF.Core 3.1添加了两个辅助函数AsAsyncEnumerable()
和AsQueryable()
,它们显式返回各自的接口IAsyncEnumerable<TEntity>
或IQueryable<TEntity>
。
给定的代码示例通过调用所需的歧义消除功能进行修复:
await _dbContext.Users.AsQueryable().AnyAsync(u => u.Name == name);
要么
await _dbContext.Users.AsAsyncEnumerable().AnyAsync(u => u.Name == name);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句