You need to enable JavaScript to run this app. OrmLite多表关联+自定义列查询结果如何映射到POCO无需逐列指定字段
优惠活动
大模型
产品
解决方案
定价
更多

OrmLite多表关联+自定义列查询结果如何映射到POCO无需逐列指定字段

方案1:使用[CompositeResult]特性(推荐,几乎无修改成本)

你当前使用的是ServiceStack OrmLite框架,它原生支持嵌套类的结果自动映射,只需要给你的POCO类加上[CompositeResult]特性即可:

using ServiceStack.OrmLite;

[CompositeResult]
public class BlogImportExportIntermediate
{
    public Blog Blog { get; set; }
    public UserAuthCustom UserAuthCustom { get; set; }
    public BloggerProfile BloggerProfile { get; set; }
    private string _blogCategroiesJson { get; set; }

    public string BlogCategroiesJson
    {
        get => _blogCategroiesJson;

        set
        {
            _blogCategroiesJson = value;
            BlogCategories = PostgreSqlMethods.FromJson<List<BlogCategory>>(value);
        }
    }

    public List<BlogCategory> BlogCategories { get; set; }
}

加完特性后直接使用你原来的查询语句即可,ORM会自动将对应表的整行数据映射到嵌套的实体属性上:

var results = db.Select<BlogImportExportIntermediate>(q);

这个方案完全不需要修改现有查询逻辑,性能和原生映射一致,完全适配大数据量导出场景。

方案2:动态结果手动映射(兼容所有版本,灵活性最高)

如果你使用的OrmLite版本不支持[CompositeResult]特性,可以先查询动态结果,再手动组装成目标POCO,转换开销极低,不会影响大数据量查询效率:

var dynamicResults = db.Select<dynamic>(q);
var results = new List<BlogImportExportIntermediate>();
foreach (var row in dynamicResults)
{
    results.Add(new BlogImportExportIntermediate
    {
        Blog = row.ConvertTo<Blog>(),
        UserAuthCustom = row.ConvertTo<UserAuthCustom>(),
        BloggerProfile = row.ConvertTo<BloggerProfile>(),
        BlogCategroiesJson = row.BlogCategroiesJson
    });
}

OrmLite内置的ConvertTo扩展方法会自动匹配列名和实体属性,不需要你手动指定任何字段。


内容的提问来源于stack exchange,提问作者Guerrilla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 06:21:00