代码之家  ›  专栏  ›  技术社区  ›  Guerrilla

如何在自动查询中使用转换器

  •  1
  • Guerrilla  · 技术社区  · 5 年前

    我有一个如下的autoquery实现:

    public QueryResponse<BlogDto> Get(BlogsLookUpRequest request)
    {
        AutoMapping.RegisterConverter((Blog from) => {
            var to = from.ConvertTo<BlogDto>(skipConverters: true); // avoid infinite recursion
            to.Category = string.Join(",", from.BlogToBlogCategories.Select(x => x.BlogCategoryId.ToString()).Distinct());
            return to;
        });
    
    
        var q = _AutoQuery.CreateQuery(request, base.Request);
        var results = _AutoQuery.Execute(request, q);
        return results;
    }
    

    我的自动查询类型是 QueryDb<Blog, BlogDto> .

    如果没有,最好的方法是什么来改变结果?

    我通过声明另一种类型来实现 public class BlogEntityQuery : QueryDb<Blog> 那没有路线。然后这样做了:

    public QueryResponse<BlogDto> Get(BlogsLookUpRequest request)
    {
        AutoMapping.RegisterConverter((Blog from) => {
            var to = from.ConvertTo<BlogDto>(skipConverters: true); // avoid infinite recursion
            to.Category = string.Join(",", from.BlogToBlogCategories.Select(x => x.BlogCategoryId.ToString()).Distinct());
            return to;
        });
    
        var q = _AutoQuery.CreateQuery(request, base.Request);
        var rawResults = _AutoQuery.Execute(new BlogEntityQuery().PopulateWith(request), q);
        var results = new QueryResponse<BlogDto>().PopulateWith(rawResults);
        return results;
    }
    

    它很管用,但感觉有点老土。由于AutoQuery正在执行自动映射,我觉得应该有一个选项来注册一个转换器供它使用。

    0 回复  |  直到 5 年前
        1
  •  0
  •   mythz    5 年前

    AutoMapping Registrations 就像所有的配置应该 仅在启动时配置一次 ,例如 AppHost.Configure() .

    自动查询本身 ,自动查询响应结果集直接从数据库结果填充,这就是为什么不使用转换器。