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

时间:2019-06-02 14:09:25

标签: servicestack

我有一个像这样的自动查询实现:

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>

不调用转换器。我想将我的联结表对象展平为csv。是否可以在自动查询映射中为此定义一些自定义映射行为?

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

编辑:

我通过声明另一个没有路由的类型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;
}

它可以工作,但感觉有点笨拙。当自动查询执行自动映射时,我觉得应该有一个选项可以注册一个转换器供其使用。

1 个答案:

答案 0 :(得分:0)

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

自动查询本身不执行任何映射,自动查询响应结果集直接从数据库结果中填充,这就是为什么不使用任何转换器的原因。