Dapper: Método no encontrado: 'System.Collections.Generic.IEnumerable`1 GridReader.Read (Boolean) '

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

Pregunta

Estoy buscando intercambiar algunas solicitudes de DB de código EF para que Dapper acelere algunas partes inactivas de nuestro sitio web. Acabo de comenzar a experimentar, y Dapper parece estar bien.

He convertido con éxito un código para usar la extensión .Query. Pero ahora estoy intentando .QueryMultiple, y luego las extensiones .Leer para obtener cada conjunto de resultados.

Intenté mover el código Dapper a un nuevo proyecto para mantenerlo alejado de mi proyecto MVC, y las cosas de .Query están bien allí. Pero cuando intento acceder a un método con .QueryMultiple, antes de que llegue a cualquier punto de interrupción en el código, obtengo el error:

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

Si muevo el código al proyecto web, funciona bien.

No puedo calcular lo que necesito o lo que falta. Visual Studio y ReSharper parecen felices. Está compilando. Esto es solo un problema de tiempo de ejecución. Ambos proyectos apuntan a .Net 4.5, ambos tienen referencias nuget a Dapper. El proyecto Dapper está configurado como una biblioteca de clases Win C #. Miré el código fuente a SqlReader.cs y no parece tener ningún 'uso' que yo no tenga. System.Collections.Generic se incluye automáticamente, creo, y ciertamente no parece seleccionable en el diálogo Agregar referencias.

Siento que me estoy perdiendo algo realmente, muy obvio ...

Aquí está el código:

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

Respuesta aceptada

Tuve exactamente el mismo problema. Mi solución fue actualizar de Dapper 1.12.1 a Dapper 1.13 a través de Nuget para que funcione.

En mi caso, el problema fue que tuve Dapper 1.13 en un proyecto y Dapper 1.12.1 en otro en la misma solución.

¡Espero que esto ayude!



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué