首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Automapper10.1.1和HotChocolate 11.1映射查询

使用Automapper10.1.1和HotChocolate 11.1映射查询
EN

Stack Overflow用户
提问于 2021-04-27 13:30:20
回答 1查看 1.2K关注 0票数 1

我正在尝试用Automapper投射我的EF核心查询,以允许我的应用程序中的第三层,但我有一些困难,允许HotChocolate请求我的DTO上的字段,并告诉Automapper在投影过程中包含这些字段。

事先有几个要点:

如果地图上设置了

  • Automapper,则当两个属性都存在
  • 时,除ExplicitExpansion设置为
  • 之外,HotChocolate将请求地图上的所有NavigationProperties,而HotChocolate不能使用NavigationProperties扩展IQueryable的导航属性

所以我可以一次加载所有导航属性,或者不加载。

如何告诉以太HotChocolate映射IQueryable中的实体,或者如何在查询函数中获得所需的键,以通过使用IQueryable<T>.ProjectTo()方法告诉AutoMapper要展开哪些属性?

EN

回答 1

Stack Overflow用户

发布于 2021-04-27 13:54:50

你试过吗?

代码语言:javascript
复制
public class Query
{
    [UseProjection] //<----
    public IQueryable<FooDto> GetFoos([Service]YourService svc)=> svc.GetFooDtos();
}

如果投影不是太复杂,这应该是可行的。

如果投影的顺序有问题,也可以创建自定义属性。

代码语言:javascript
复制
    public class YourCustomMiddlewareAttribute : ObjectFieldDescriptorAttribute
    {
        public override void OnConfigure(
            IDescriptorContext context, 
            IObjectFieldDescriptor descriptor, 
            MemberInfo member)
        { 
            descriptor.Type<ListType<ObjectType<PersonDto>>>();
            descriptor.Use(next => async context =>
            {
                await next(context);
                if (context.Result is IQueryable<Person> persons)
                { 
                    context.Result = persons
                         .ProjectTo<PersonDto>()
                         .ToListAsync(context.RequestAborted);
                }
            })
        }
    }
代码语言:javascript
复制
public class Query
{
    [YourCustomMiddleware]
    [UseProjection]
    public IQueryable<FooDto> GetFoos([Service]YourService svc)=> svc.GetFooDtos();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67284037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档