我有一个像这样的自动查询实现:
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;
}
它可以工作,但感觉有点笨拙。当自动查询执行自动映射时,我觉得应该有一个选项可以注册一个转换器供其使用。
答案 0 :(得分:0)
AutoMapping Registrations像所有配置一样,应该在启动时仅配置一次,例如在AppHost.Configure()
中。
自动查询本身不执行任何映射,自动查询响应结果集直接从数据库结果中填充,这就是为什么不使用任何转换器的原因。