dapper querymultiple erreur de spliton

asp.net-mvc dapper

Question

J'utilise: ASP.NET MVC, MySQL, Dapper.NET micro-orm J'ai fait une procédure stockée avec 3 SELECT, dont deux retournent des listes et le troisième renvoie un entier.

Voici mon code:

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

Dans ITopic j'ai TopicId, dans IMessage j'ai MessageId.

Et voici l'erreur:

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

J'ai essayé d'ajouter splitOn à la fois sur QueryMultiple et Read et Nigher l'a accepté.

Bien que je ne comprenne pas pourquoi j'ai besoin de splitOn? ne peut-on pas voir que j'ai trois sélections distinctes? Lors de l'utilisation de conn.Read (savedProcedure, paramètres) sur chacune des sélections séparément (au lieu de MultipleQuery sur tous les ensembles), dapper n'a aucun problème à le mapper sur un objet donné.

Qu'est-ce que je fais mal?

Réponse acceptée

1) Problème résolu lorsque j'ai utilisé les noms de modèles réels au lieu de leurs noms d'interfaces:

TopicView au lieu de ITopic, TopTopicsView au lieu de IMessage;

2) Une fois que cela a été corrigé et qu’il n’y avait plus d’erreur "no splitOn", un autre problème est survenu avec le casting <int>:

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

probablement que mysql ne renvoie pas de numéros sous la forme ints?

J'ai essayé d'utiliser décimal, objet, dynamique, etc. sans succès. Finalement, il a été corrigé en créant un autre modèle avec la propriété int à l'intérieur qui a le même nom que le paramètre int et qui fonctionne maintenant.

3) Voici le code de travail final:

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


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi