繁体   English   中英

迁移到 .Net Core v3.1 后 IAsyncQueryProvider 构建错误

[英]IAsyncQueryProvider build errors after migrating to .Net Core v3.1

将项目从 .NET Core 2.2 迁移到版本 3.1 后,IAsyncEnumerator 和 IAsyncQueryProvider 出现错误:

  1. 类型 'IAsyncEnumerable' 存在于 'System.Interactive.Async, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263' 和 'System.Runtime, Version=4.2.2.0
  2. “TestAsyncQueryProvider”未实现接口成员“IAsyncQueryProvider.ExecuteAsync(Expression)”。 “TestAsyncQueryProvider.ExecuteAsync(Expression)”无法实现“IAsyncQueryProvider.ExecuteAsync(Expression)”,因为它没有匹配的“IAsyncEnumerable”返回类型。

我设法解决了与 IAsyncEnumerable 相关的第一个问题,下面是我在谷歌上找到的此修复程序:

  <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。

IdentityServer 更新中的 Execute 接口已替换为 ExecuteAsync。

有一个库已成功将此模拟实现升级到 .NET Core 3.0:

https://github.com/romantitov/MockQueryable/blob/master/src/MockQueryable/MockQueryable/TestAsyncEnumerable.cs

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM