首页 > 解决方案 > Dapper ORM 不接受多个模型

问题描述

我遇到了一个问题,Dapper 不接受多个模型,请参阅我的代码示例。我在查询中有 QueueItems 和机器人模型,但是当我添加第二个(机器人)时,我收到以下错误“IDBconnection 不包含查询的定义”

public void getdata()
{
    using (IDbConnection connection = new SqlConnection(con))
    {
        string sql = "Select * from QueueItems";

        var queryResult = connection.Query<QueueItems,Robots>(sql).ToList();

    }
}

标签: databaseormdapper

解决方案


如果您的结果集包含两个 pocos 的列,则必须将它们包装在一个信封(类型化类或动态)对象中,因为您只能返回一种类型。

方法签名是

var result = connection.Query<QueueItems,Robots,dynamic>(sql, (queueItem,robot) => {
                       dynamic d = new ExpandoObject();
                       d.QueueItem = queueItem
                       d.Robot = robot; 
                       return d;
                     }, splitOn: "...insert split columns unless they're named Id...");

这将返回一个动态列表,其中每条记录都包含一个 QueueItem 和 Robot 属性。

默认情况下,Dapper 在“Id”列上拆分。如果您的查询返回这样的记录集:

|Id|C1|C2|C3|Id|C4|C5

Id、C1、C2 和 C3 将映射到 queueItem,Id、C4 和 C5 将映射到机器人。


推荐阅读