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; } |