Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET核心自动映射器使用ASDataSource或ProjectTo_C#_Asp.net_Entity Framework_.net Core_Automapper - Fatal编程技术网

C# .NET核心自动映射器使用ASDataSource或ProjectTo

C# .NET核心自动映射器使用ASDataSource或ProjectTo,c#,asp.net,entity-framework,.net-core,automapper,C#,Asp.net,Entity Framework,.net Core,Automapper,我在AutoMapper docu中读到,UseAsDataSource应该和ProjectTo做同样的工作。然而,我有一个非常奇怪的问题: 此代码正在运行: var _query = this.IUnitOfWork.IDataCrmRepository.contacts .Where(w => w.org_id == config_org_id) .UseAs

我在AutoMapper docu中读到,UseAsDataSource应该和ProjectTo做同样的工作。然而,我有一个非常奇怪的问题:

此代码正在运行:

var _query = this.IUnitOfWork.IDataCrmRepository.contacts
                                .Where(w => w.org_id == config_org_id)
                                .UseAsDataSource(this.IMapper.ConfigurationProvider)
                                .For<DTO.contact>()
                                ;
// nov order by optional navigation property (address) which may be null    
_query = _query.OrderBy(o => o.address.city);

return _query.ToArray();
这就是区别吗

好的,我不必了解所有内容,让我们继续使用
UseAsDataSource
。但是,当我尝试实现async/await时,要
返回await\u query.ToArrayAsync()它不适用于
UseAsDataSource
,我遇到另一个错误:

    Connection id "0HLIBS9MUOGQR", Request id "0HLIBS9MUOGQR:00000001": An unhandled exception was thrown by the application.
System.InvalidOperationException: The provider for the source IQueryable doesn't implement IAsyncQueryProvider. Only providers that implement IEntityQueryProvider can be used for Entity Framework asynchronous operations.
   at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync[TSource,TResult](MethodInfo operatorMethodInfo, IQueryable`1 source, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.CountAsync[TSource](IQueryable`1 source, CancellationToken cancellationToken)
为了使这一点更加复杂,当我删除.OrderBy调用时,ProjectTo与async/await配合得很好


有什么想法吗?

关于ProjectTo,您可能遇到了EF核心问题。检查。使用它,您可以编写一个在没有AM的情况下失败的查询。然后检查EF核心问题的想法。当我在项目中将order by语句改为:
\u query=\u query.OrderBy(o=>(o.address!=null)?o.address.city:null)然后它就工作了。。奇怪..ProjectTo应该是链中的最后一个调用。否则,结果将因IQueryable提供程序而异。有些人会把数据翻译成acceses,有些人不会。UseAsDataSource应该在这方面有所帮助,但我对此了解不多。而且总是有表达式映射。
Microsoft.AspNetCore.Server.Kestrel[13]
      Connection id "0HLIBS29CUR23", Request id "0HLIBS29CUR23:00000006": An unhandled exception was thrown by the application.
System.NullReferenceException: Object reference not set to an instance of an object.
   at lambda_method(Closure , TransparentIdentifier`2 )
   at System.Linq.EnumerableSorter`2.ComputeKeys(TElement[] elements, Int32 count)
   at System.Linq.EnumerableSorter`1.ComputeMap(TElement[] elements, Int32 count)
   at System.Linq.EnumerableSorter`1.ElementAt(TElement[] elements, Int32 count, Int32 idx)
   at System.Linq.OrderedEnumerable`1.GetEnumerator(Int32 minIdx, Int32 maxIdx)+MoveNext()
   at System.Linq.Enumerable.SelectIPartitionIterator`2.MoveNext()
   at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor`1.EnumeratorExceptionInterceptor.MoveNext()
   at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
   at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
    Connection id "0HLIBS9MUOGQR", Request id "0HLIBS9MUOGQR:00000001": An unhandled exception was thrown by the application.
System.InvalidOperationException: The provider for the source IQueryable doesn't implement IAsyncQueryProvider. Only providers that implement IEntityQueryProvider can be used for Entity Framework asynchronous operations.
   at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync[TSource,TResult](MethodInfo operatorMethodInfo, IQueryable`1 source, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.CountAsync[TSource](IQueryable`1 source, CancellationToken cancellationToken)