Jugando con Dapper, estoy bastante satisfecho con los resultados hasta ahora, ¡intrigante!No se puede obtener el mapeo múltiple para trabajar en Dapper
Pero ahora, mi próximo escenario sería leer datos de dos tablas: una tabla Student
y una tabla Address
.
Student
tabla tiene una clave principal de StudentID (INT IDENTITY)
, Address
tiene un AddressID (INT IDENTITY)
. Student
también tiene un FK llamado AddressID
vinculándolo a la tabla Address
.
Mi idea era crear dos clases, una para cada mesa, con las propiedades que me interesan. Además, puse un PrimaryAddress
propiedad de tipo Address
en mi clase Student
en C#.
Luego trató de recuperar tanto los datos de los estudiantes y de direcciones en una sola consulta - que imitan la muestra que se le da en la Github page:
var data = connection.Query<Post, User>(sql, (post, user) => { post.Owner = user; });
var post = data.First();
Aquí, un Post
y una User
se recuperan, y el titular de la publicación se establece para el usuario; el tipo devuelto es Post
- ¿correcto?
Así que en mi código, definen dos parámetros al genérico método Query
extensión - un Student
como la primera que debe ser devuelto, y un Address
como el segundo, que será almacenada en la instancia estudiante:
var student = _conn.Query<Student, Address>
("SELECT s.*, a.* FROM dbo.Student s
INNER JOIN dbo.Address a ON s.AddressID = a.AddressID
WHERE s.StudentenID = @Id",
(stu, adr) => { stu.PrimaryAddress = adr; },
new { Id = 4711 });
el problema es - me aparece un error en Visual Studio:
Utilizando el método genérico 'Dapper.SqlMapper.Query (System.Data.IDbConnection, cadena, System.Func, dinámico, System.Data.IDbTransaction, bool, string, int ?, System.Data.CommandType?)' Requiere 6 argumentos de tipo
Realmente no entiendo por qué Dapper insiste en usar esta sobrecarga con 6 argumentos tipo ...
que tenían exactamente el mismo problema y me tomó un tiempo para averiguar por qué - como explica Sam! –