En jouant avec Dapper, je suis assez content des résultats obtenus jusqu'à présent - intrigant! Mais maintenant, mon prochain scénario consisterait à lire les données de deux tables: une table Student
et une table Address
.Impossible de faire fonctionner le multi-mapping dans Dapper
Table Student
a une clé primaire de StudentID (INT IDENTITY)
, Address
a un AddressID (INT IDENTITY)
. Student
a également un FK appelé AddressID
reliant dans la table Address
.
Mon idée était de créer deux classes, une pour chaque table, avec les propriétés qui me intéressent. De plus, je mets une propriété PrimaryAddress
de type Address
sur ma Student
classe en C#.
J'ai ensuite essayé de récupérer les données des élèves et adresse dans une seule requête - je miment l'échantillon qui est donnée sur la Github page:
var data = connection.Query<Post, User>(sql, (post, user) => { post.Owner = user; });
var post = data.First();
Ici, un Post
et un User
sont récupérés, et le propriétaire de le poste est défini à l'utilisateur - le type renvoyé est un Post
- correct?
Donc, dans mon code, je définir deux paramètres à la méthode Query
d'extension générique - un Student
comme le premier qui doit être retourné, et un Address
comme le second, qui sera stocké sur l'instance de l'étudiant:
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 });
le problème est - j'obtiens une erreur dans Visual studio:
en utilisant la méthode générique « Dapper.SqlMapper.Query (System.Data.IDbConnection, chaîne , System.Func, dynamique, System.Data.IDbTransaction, bool, string, int ?, System.Data.CommandType?) » Nécessite 6 arguments de type
Je ne comprends pas vraiment pourquoi Dapper insiste sur l'utilisation de cette surcharge avec 6 arguments de type ...
J'ai eu exactement le même problème et il m'a fallu un certain temps pour comprendre pourquoi - comme Sam explique! –