【发布时间】:2020-05-30 10:37:01
【问题描述】:
将项目从 .NET Core 2.2 迁移到 3.1 版后,我收到 IAsyncEnumerator 和 IAsyncQueryProvider 错误:
- “IAsyncEnumerable”类型存在于“System.Interactive.Async, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263”和“System.Runtime, Version=4.2.2.0”中
- “TestAsyncQueryProvider”未实现接口成员“IAsyncQueryProvider.ExecuteAsync(Expression)”。 “TestAsyncQueryProvider.ExecuteAsync(Expression)”无法实现“IAsyncQueryProvider.ExecuteAsync(Expression)”,因为它没有匹配的返回类型“IAsyncEnumerable”。
我设法通过以下修复解决了与 IAsyncEnumerable 相关的第一个问题,我在 google 上找到了该修复:
<Target Name="ChangeAliasesOfReactiveExtensions" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
<ItemGroup>
<ReferencePath Condition="'%(FileName)' == 'System.Interactive.Async'">
<Aliases>ix</Aliases>
</ReferencePath>
</ItemGroup>
</Target>
但是,我找不到第二个问题的任何解决方案。
出现错误的代码示例:
internal class TestAsyncQueryProvider<TEntity> : IAsyncQueryProvider
{
private readonly IQueryProvider _inner;
internal TestAsyncQueryProvider(IQueryProvider inner)
{
_inner = inner;
}
public IQueryable CreateQuery(Expression expression)
{
return new TestAsyncEnumerable<TEntity>(expression);
}
public IQueryable<TElement> CreateQuery<TElement>(Expression expression)
{
return new TestAsyncEnumerable<TElement>(expression);
}
public object Execute(Expression expression)
{
return _inner.Execute(expression);
}
public TResult Execute<TResult>(Expression expression)
{
return _inner.Execute<TResult>(expression);
}
public IAsyncEnumerable<TResult> ExecuteAsync<TResult>(Expression expression)
{
return new TestAsyncEnumerable<TResult>(expression);
}
public Task<TResult> ExecuteAsync<TResult>(Expression expression, CancellationToken cancellationToken)
{
return Task.FromResult(Execute<TResult>(expression));
}
}
我想知道是否有人遇到过类似的问题并设法解决了这些问题。另外,值得一提的是,我仍在使用 EF Core v2.x 并且尚未将其迁移到版本 3。
【问题讨论】:
-
错误信息是 C# 101... 你的
TestAsyncQueryProvider类实现的IAsyncQueryProvider接口已经从 2.2 更改为 3.1,所以你需要更新你的类以符合更新后的接口。
标签: c# asp.net .net async-await entity-framework-core