Dapper: Méthode introuvable: 'System.Collections.Generic.IEnumerable`1 GridReader.Read (Boolean) '

.net asp.net-mvc c#-4.0 dapper generics

Question

Je cherche à échanger des demandes de db de code EF-premier pour Dapper pour accélérer certaines parties lentes de notre site Web. Je viens juste de commencer à expérimenter, et Dapper semble aller bien.

J'ai converti avec succès du code pour utiliser l'extension .Query. Mais maintenant, j'essaie .QueryMultiple, puis les extensions .Read pour obtenir chaque jeu de résultats.

J'ai essayé de déplacer le code Dapper dans un nouveau projet pour le garder éloigné de mon projet MVC, et les fichiers .Query sont là. Mais quand j'essaie d'accéder à une méthode avec .QueryMultiple, avant même qu'elle n'atteigne des points d'arrêt dans le code, j'obtiens l'erreur suivante:

Method not found: 'System.Collections.Generic.IEnumerable`1<!!0> GridReader.Read(Boolean)'.

Si je déplace le code dans le projet Web, cela fonctionne correctement.

Je ne peux pas savoir ce dont j'ai besoin ou ce qui manque. Visual Studio et ReSharper semblent heureux. C'est compiler. Ceci est juste un problème d'exécution. Les deux projets ciblent .Net 4.5, les deux ont des références à Dapper. Le projet Dapper est défini comme une bibliothèque de classes Win C #. J'ai regardé le code source dans SqlReader.cs et il ne semble pas y avoir de "utilisation" que je n'ai pas déjà. Je crois que System.Collections.Generic est automatiquement inclus et ne semble certainement pas être sélectionnable dans le dialogue Ajouter des références.

Je sens que je manque quelque chose de vraiment, vraiment évident ...

Voici le code:

        using (var conn = new SqlConnection(ConnectionString))
        {
            conn.Open();

            // TODO: Add in checks
            const string query = @"
            SELECT * FROM FileCollections WHERE Id = @fileCollectionId
            SELECT * FROM Files f WHERE FileCollection_Id = @fileCollectionId
            SELECT * FROM ExternalLinks WHERE FileCollection_Id = @fileCollectionId
            ";

            // return a GridReader
            using (var result = conn.QueryMultiple(query, new {fileCollectionId}))
            {
                var fileCollection = result.Read<FileCollection>().Single();
                var files = result.Read<File>().ToList();
                fileCollection.Files = files;
                var externalLinks = result.Read<ExternalLink>().ToList();
                fileCollection.ExternalLinks = externalLinks;
                return fileCollection;
            }
        }

Réponse acceptée

J'ai eu exactement le même problème. Mon correctif était de mettre à jour de Dapper 1.12.1 à Dapper 1.13 à travers Nuget pour le faire fonctionner.

Dans mon cas, le problème était que je détenais Dapper 1.13 dans un projet et Dapper 1.12.1 dans un autre dans la même solution.

J'espère que cette aide!




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