Играя с Dapper, я доволен результатами до сих пор - интригующе!
Но теперь мой следующий сценарий будет состоять в том, чтобы читать данные из двух таблиц - таблицы Student
и Address
.
Student
таблица имеет первичный ключ StudentID (INT IDENTITY)
, Address
имеет AddressID (INT IDENTITY)
. Student
также имеет FK, называемый AddressID
, связанный с таблицей Address
.
Моя идея состояла в том, чтобы создать два класса, по одному для каждой таблицы, со свойствами, которые меня интересуют. Кроме того, я поместил свойство PrimaryAddress
типа Address
в мой класс Student
в С#.
Затем я попытался получить как студенческие, так и адресные данные в одном запросе - я сопоставляю образец, который указан на странице Github:
var data = connection.Query<Post, User>(sql, (post, user) => { post.Owner = user; });
var post = data.First();
Здесь извлекаются Post
и a User
, а владелец сообщения устанавливается пользователем - возвращаемый тип является Post
- правильным?
Итак, в моем коде я определяю два параметра для общего метода расширения Query
- a Student
в качестве первого, который должен быть возвращен, а Address
в качестве второго, который будет сохранен на экземпляр студента
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 });
Проблема - я получаю сообщение об ошибке в Visual Studio:
Используя общий метод "Dapper.SqlMapper.Query(System.Data.IDbConnection, строка, System.Func, динамическое, System.Data.IDbTransaction, bool, string, int?, System.Data.CommandType?) 'Требует 6 аргументы типа
Я действительно не понимаю, почему Dapper настаивает на использовании этой перегрузки с 6 аргументами типа...