dapper querymultiple spliton error

时间:2014-09-19 16:39:10

标签: asp.net-mvc dapper

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

这是我的代码:

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。

这是错误:

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?不能看到我有三个单独的SELECT?当在每个选择上分别使用conn.Read(storedProcedure,parameters)时(而不是在所有的一起使用MultipleQuery),dapper将它映射到给定对象没有问题。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

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

TopicView而不是ITopic,TopTopicsView而不是IMessage;

2)一旦修复并且不再出现“没有splitOn”错误,则启动另一个问题&lt; int&gt;在线投射:

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

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

我尝试使用小数,对象,动态等等。没有运气。最后通过创建另一个带有int属性的Model来修复它,该属性与database int参数同名,现在它可以工作。

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

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