关于asp.net mvc:dapper querymultiple spliton错误

dapper querymultiple spliton error

我正在使用:ASP.NET MVC、MySql、Dapper.NET micro-orm
我创建了一个包含 3 个 SELECT 的存储过程,其中两个返回列表,第三个返回一个整数。

这是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
using (var conn = new MySqlConnection(GetConnectionString()))
{
    var readDb = conn.QueryMultiple(storedProcedure, parameters, commandType: CommandType.StoredProcedure);

    var result = new someView
    {
        TopicsList = readDb.Read<ITopic>().ToList(),
        TopTopicsList = readDb.Read<IMessage>().ToList(),
        TopicsCount = readDb.Read<int>().Single()
    };

    return result;
}

在 ITopic 我有 TopicId,在 IMessage 我有 MessageId。

这是错误:

1
When using the multi-mapping APIs ensure you set the splitOn param if you have keys other than Id Parameter name: splitOn

我尝试在 QueryMultiple 和 Read 上添加 splitOn,并接受了它。

虽然我不明白为什么我需要 splitOn? dapper 看不到我有三个单独的 SELECT 吗?当在每个选择上单独使用 conn.Read(storedProcedure,parameters) 时(而不是在所有选择上使用 MultipleQuery),dapper 将其映射到给定对象没有问题。

我做错了什么?


1) 当我使用真实模型名称而不是它们的接口名称时问题解决了:

TopicView代替ITTopic,TopTopicsView代替IMessage;

2) 一旦这个问题得到修复并且不再出现"no splitOn"错误,就开始了另一个与 行中的强制转换有关的问题:

1
TopicsCount = readDb.Read<int>().Single()

可能mysql不会将数字返回为整数?

我尝试使用小数、对象、动态等。但没有成功。最终通过创建另一个具有 int 属性的模型来修复它,该模型与数据库 int 参数具有相同的名称,现在它可以工作了。

3) 这是最终的工作代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using (var conn = new MySqlConnection(GetConnectionString()))
{
    var parameters = context.MapEntity(query);

    var multi = conn.QueryMultiple(storedProcedure, parameters, commandType: System.Data.CommandType.StoredProcedure);

    var TopicsList = multi.Read<TopicView>().ToList();
    var TopTopicsList = multi.Read<TopTopicsView>().ToList();
    var result = multi.Read<HomeView>().Single();

    result.TopicsList = TopicsList;
    result.TopTopicsList = TopTopicsList;

    return result;
}