【发布时间】:2020-10-03 19:13:13
【问题描述】:
我尝试在 .NET Core 3.1 中结合 Automapper 和 OData,但我已经卡住了一段时间。我的 OData 控制器以这种方式工作就像一个魅力:
[ODataRoute]
[EnableQuery]
public IQueryable<Unit> Get()
{
return _context.Units;
}
_context 是我的 EF DbContext。
但是,我需要公开 UnitDto 而不是 Unit。
到目前为止我尝试的是:
[ODataRoute]
[EnableQuery]
public IQueryable<UnitDto> Get()
{
var units = _context.Units;
return units.ProjectTo<UnitDto>(_mapper.ConfigurationProvider);
}
但这会导致空引用异常:
System.NullReferenceException:对象引用未设置为对象的实例。
在 lambda_method(Closure , QueryContext , DbDataReader , ResultContext , Int32[] , ResultCoordinator)
在 Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable1.AsyncEnumerator.MoveNextAsync() at Microsoft.AspNetCore.Mvc.Infrastructure.AsyncEnumerableReader.ReadInternal[T](Object value) at Microsoft.AspNetCore.Mvc.Infrastructure.AsyncEnumerableReader.ReadInternal[T](Object value) at Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor.ExecuteAsyncEnumerable(ActionContext context, ObjectResult result, Object asyncEnumerable, Func2 读者)
等等
使用Automapper.Aspnetcore.Odata.EFCore 中的GetQueryAsync 会导致相同的异常:
[HttpGet]
public async Task<IActionResult> GetAll(ODataQueryOptions<UnitDto> options)
{
return Ok(await _context.Units.GetQueryAsync(_mapper, options));
}
关于如何实现这一目标的任何想法?这是要走的路吗?我做错了什么还是应该走另一个方向?
【问题讨论】:
标签: .net-core odata automapper